Redis共有5中主要的数据结构
1,String字符串
2,List 列表
3,dict字典
4,set 集合
5,sortset 有序集合
1,String
2,list 列表
Redis的list 有两种实现方式1 ziplist(压缩列表)2 双向循环链表
当ziplist要求单个元素的大小不超过64byte 当数据个数小于 512个时 使用ziplist 否则使用双向循环链表
3,dict字典
同样 dict表也有两种实现方式 ziplist 和 散列表
当单个元素小于64byte 元素个数小于512时使用ziplist 否则使用hashtable
redis的hash 现实使用murmurhash2作为hash算法 速度快,当装载因子大于1时对hash表进行扩容,当装载因子小于0.1时进行缩容。对于hash值相同的hash冲突使用链表解决。扩容时扩容为当前的2倍,使用逐步分批搬迁数据,防止长耗时造成服务延时,当后续有hget/hdel查找更新等对当前hash的操作时逐步迁移,如果没有后续操作,redis也会进行定时迁移。
4,set
集合
和dict使用的数据结构相同
5,sortset
有序集合,集合中每个value对应一个score
当数据单个大小小于64btye 个数小于128时,使用ziplist
否则使用 hashtable + 跳表实现 可快速取得对应value分值 及排行区间数据 hash存储value 跳表存储score和value的指针
跳表--基于链表(应该是双向链表) 筛选链表节点建立多级区间索引,使查找效率提升为o(logn);