Redis知识总结--五种基础数据结构
string
string应该是redis最常被用到的数据结构,简单的get、set即可操作。
为了避免内存空间不够造成频繁扩容,通常会分配一块大于value长度的内存空间,空间大小使用capicity表示,value长度使用length表示,capicity>length,底层实现是类似java的ArrayList数据结构,因此是可变的,当value小于1M时,扩容会加倍现有空间,大于1M时,扩容只会增加1M的空间,最多只能占用512M的空间。
实践中通常会使用setnx和expire的结合使用来实现简单的分布式锁,但这种锁是悲观锁,实际业务场景下需要对被阻塞的业务线程做额外的处理,此外虽然是字符串,但也可以直接保存数字类型,并使用incr、incrby命令对value进行自增操作。
list
作用类似java的ArrayList,但底层使用的是quickList数据结构,既可以使用命令模拟数据结构中的队列(先进先出),也可以模拟栈(先进后出)。
由于使用了LinkedList,队列的修改时间复杂度为O(1),但遍历时间复杂度为O(n),使用时需要注意。 由于LinkedList比较占空间,redis针对此结构做了优化,当list较小时,redis使用的是zipList--列表元素使用一整块连续的内存空间,当超过一定大小时,redis会用双向链表将多个zipList链接起来,这种数据结构被称为quickList
hash
hash的实现类似java的HashMap,都是数组+链表的底层实现。
值得一提的是redis对rehash操作进行了优化,不同于jdk中的一次性全部rehash完毕,redis使用的渐进式的rehash策略,即陆续rehash,同时不阻塞主线程的运行。
set
set可以看做value为null的hash,不能重复且无序
zset
即有序set,可以通过相关命令对设置的score进行排序。
zset底层使用的是skipList结构,此结构可以看做一个多层链表,最底层包括所有元素,倒数第二层包括所有元素中的部分元素,倒数第三层又包括倒数第二层中的部分元素等等,这样进行查找或修改操作时,从顶层开始然后逐级向下查找,会提高操作效率,是比较典型的以空间换时间的解决方案。
- Redis命令总结及其基础知识讲述
- Redis数据结构底层知识总结
- Java基础知识强化之集合框架笔记72:集合特点和数据结构总结
- Redis数据结构底层知识总结
- Redis命令总结及其基础知识讲述
- Redis学习笔记之入门基础知识——五种数据类型
- Redis基础知识总结
- JAVA基础知识总结(1)
- SQL Server数据库基础知识归纳总结
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
- C语言基础知识总结
- C/C++基础知识总结3
- Redis提供的五种数据结构
- Java基础知识总结(绝对经典)
- linux基础知识总结
- Java基础知识学习总结---(java连接Oracle数据库)
- shell基础知识总结
- spring基础知识总结
- Android linux 基础知识总结
- 嵌入式系统基础及知识及接口技术总结