参考地址<br>
https://www.cnblogs.com/hunternet/p/9989771.html
https://database.51cto.com/art/201906/598234.htm<br>
https://www.cnblogs.com/jaycekon/p/6227442.html<br>
https://www.cnblogs.com/jaycekon/p/6277653.html
https://juejin.im/post/5b53ee7e5188251aaa2d2e16
http://remcarpediem.net/article/fa5c04fa/<br>
http://www.baowenwei.com/post/fen-bu-shi/redisshe-ji-yuan-li-zhi-di-ceng-shu-ju-jie-gou
http://blog.loading.ink/2018/11/14/%E5%9B%BE%E8%A7%A3Redis%E4%B9%8B%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%AF%87%E2%80%94%E2%80%94%E7%AE%80%E5%8D%95%E5%8A%A8%E6%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2SDS/
https://zhuanlan.zhihu.com/p/64772193<br>
https://blog.csdn.net/caishenfans/article/details/44784131
底层对象
REDIS_ENCODING_INT:long 类型的整数
REDIS_ENCODING_EMBSTR:embstr 编码的简单动态字符串
REDIS_ENCODING_RAW:简单动态字符串
REDIS_ENCODING_HT:字典<br>
REDIS_ENCODING_LINKEDLIST:双端链表
REDIS_ENCODING_ZIPLIST:压缩列表
REDIS_ENCODING_INTSET:整数集合
REDIS_ENCODING_SKIPLIST:跳跃表和字典
基础数据类型
String(Simple Dynamic String)
命令
参考
http://www.pianshen.com/article/2982345910/
https://xilidou.com/2018/03/12/redis-data/
https://blog.csdn.net/u013679744/article/details/79195563
优势
获取字符串长度(SDS O(1))
杜绝缓冲区溢出
减少修改字符串长度时造成的内存再次分配。
预分配
惰性释放<br>
二进制安全。
兼容C语言<br>
链表:linked-list<br>
特点
它是有序的
能够存储2的32次方减一个节点(超过 40 亿个节点)
Redis 链表是双向的,因此即可以从左到右,也可以从右到左遍历它存储的节点
链表结构查找性能不佳,但 插入和删除速度很快
结构
参考
https://xilidou.com/2018/03/12/redis-data/<br>
https://blog.csdn.net/yangshangwei/article/details/82792672<br>
压缩列表:ziplist
结构
图示
注释
ziplist
zlbytes
zltail
zllen<br>
entry
zlend
entry
<prevrawlen><len><data></data></len></prevrawlen>prevrawlen:表示前一个数据项占用的总字节数<br>
前一个数据项占用字节数小于254
如果前一个数据项占用字节数大于等于254
len
data<br>
参考
https://zhuanlan.zhihu.com/p/68667360<br>
https://segmentfault.com/a/1190000017328042
https://throwsnew.com/2017/09/12/%E4%B8%BA%E4%BB%80%E4%B9%88Redis%E4%BD%BF%E7%94%A8ziplist%E8%83%BD%E8%8A%82%E7%9C%81%E5%86%85%E5%AD%98/<br>
http://zhangtielei.com/posts/blog-redis-ziplist.html
https://www.jianshu.com/p/37c49b4e3bd0
https://cloud.tencent.com/developer/article/1483214
http://www.baowenwei.com/post/fen-bu-shi/redisshe-ji-yuan-li-zhi-wu-chong-dui-xiang-er#toc_7
https://www.jianshu.com/p/41e39eed1578
实例
方法
redis命令
快速列表:quicklist
参考
https://www.jianshu.com/p/542ee9514dfd
https://www.cnblogs.com/virgosnail/p/9542470.html<br>
https://blog.csdn.net/zhaoliang831214/article/details/82054476<br>
https://matt.sh/redis-quicklist
特点
源码
优劣
hash表:hashtable
特点
参考
http://blog.loading.ink/2018/11/20/%E5%9B%BE%E8%A7%A3Redis%E4%B9%8B%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%AF%87%E2%80%94%E2%80%94%E5%AD%97%E5%85%B8/<br>
https://www.cnblogs.com/jaycekon/p/6227442.html
子主题
源码
结构
dict<br>
type
privdata
ht[2]
trehashidx
dictht
table
size<br>
sizemask
used
子主题
优劣
场景
命令
rehash
条件
服务器目前没有执行BGSAVE(rdb持久化)命令或者BGREWRITEAOF(AOF文件重写)命令,并且散列表的负载因子大于等于1。
服务器目前正在执行BGSAVE命令或者BGREWRITEAOF命令,并且负载因子大于等于5。
当负载因子小于0.1时,程序自动开始执行收缩操作。<br>
过程
1.为字典的ht[1]散列表分配空间
2.将保存在ht[0]中的键值对重新计算键的散列值和索引值,然后放到ht[1]指定的位置上。<br><br>
3.将ht[0]包含的所有键值对都迁移到了ht[1]之后,释放ht[0],将ht[1]设置为ht[0],并创建一个新的ht[1]哈希表为下一次rehash做准备。<br>
渐进式hash
1.因为在进行渐进式 rehash 的过程中,字典会同时使用 ht[0] 和 ht[1] 两个哈希表,所以在渐进式 rehash 进行期间,字典的删除(delete)、查找(find)、更新(update)等操作会在两个哈希表上进行。
2.在渐进式 rehash 执行期间,新添加到字典的键值对一律会被保存到 ht[1] 里面,而 ht[0] 则不再进行任何添加操作:这一措施保证了 ht[0] 包含的键值对数量会只减不增,并随着 rehash 操作的执行而最终变成空表。
子主题
子主题<br>
整数集合:intset
参考
http://zhangtielei.com/posts/blog-redis-intset.html
结构
encoding
INTSET_ENC_INT16
INTSET_ENC_INT32<br>
INTSET_ENC_INT64
length
contents<br>
图示
场景
源码
跳跃表
结构
子主题
子主题
源码
参考
https://www.jianshu.com/p/ac351674d8eb?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
https://www.jianshu.com/p/d12389b80a19
https://blog.csdn.net/idwtwt/article/details/80233859
子主题
理论
参考
https://www.jianshu.com/p/ac351674d8eb?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
什么是跳跃表
参考
https://www.cnblogs.com/jaycekon/p/6227442.html