链表在redis 的常用:
列表,发布订阅,满查询,监视器等。
- 双向链表,通过prev和next指针来实现前后节点的访问
- 无环,头节点和尾节点都是以null为终点
- 具备带头指针和带尾指针
- 链表长度计数器
- 存放不同类型的数据
字典(关联数组,映射):
- 在执行set a b时候,就会创建a为键名,b为键值的关联数组。
- 字典的底层通过hash来实现,一个hash表里面有多个hash节点,一个hash节点中保存一对键值,通过链地址法来解决hash冲突
- hash使用的算法:murmurHash2
- 对于rehash操作:通过对负载因子的判断来决定是否进行resh,将旧hash复制到新的hash表中,然后移除旧的hash表。
- 为了防止数据量过大造成服务器宕机,通过引入索引计数rehashidx来实现渐进式rehash,当复制开始时候,将rehashidx设置为0,每当进行字典进行操作时候,rehashidx增一,再完成后,将其值设置为-1,表示rehash操作完成,渐进式的过程中,对数据的查找,会在旧表中查找后,如果没有,会在新表中进行查找。