redis 压缩列表的设计:
1:为了弥补链表查找慢而且占用内存较多而且内存不连续导致不能很好的利用cpu缓存,于是创建了拥有连续内存的压缩列表。
2:压缩列表相对双向链表的优势:
2.1:内存连续,可以更好利用cpu缓存
3:压缩列表的劣势:
3.1:只能存少量的节点,因为节点数太多查找性能会变慢。
3.2:会有连锁更新的问题,压缩列表的节点大小会受前一个节点的大小的影响,所以有可能一个节点的更新会导致所有后续节点的内存空间重新分配,
使得查询性能降低
3.3:redis在后面的版本中淘汰了压缩列表,使用listpack结构来替换了
===================================================================
===================================================================
redis 哈希表的设计:
1:就是把key进行hash计算存起来,会有下面三个问题
1.1:hash冲突。redis解决hash冲突是通过链式地址法的,就是两个节点冲突了就连成一个链表。
1.2:链表长了查找速度变慢。这时候要进行rehash操作(为了解决rehash比较慢,redis设计了渐进式rehash办法,通过多次rehash完成)
1.3:什么时候会触发rehash。redis有个负载因子的,负载因子 = 所有节点数/哈希表size。当负载因子超过5,就触发了;或者当负载因子大于1,
并且没有进行备份的时候也会触发。
===================================================================
===================================================================