Redis中hash、set、zset的底层数据结构原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis中hash、set、zset的底层数据结构原理相关的知识,希望对你有一定的参考价值。
参考技术ARedis-哈希对象(hash)
Redis-集合对象(set)
其中hashtable的key为set中元素的值,而value为null
inset为可以理解为数组,使用inset数据结构需要满足下述两个条件:
intset的底层结构
查询方式一般采用二分查找法,实际查询复杂度也就在log(n)
Redis-有序集合对象(zset)
底层实现为 字典(dict) + 跳表(skiplist),当数据比较少的时候用ziplist编码结构存储。
同时满足以下两个条件采用ziplist存储:
ziplist存储方式
总结
redis manual
1、setbit bitmap 99 1:标识n个事物的状态(0/1)。
2、数据结构优先采用hash:当hash中fields较少时,底层的物理存储使用ziplist压缩方式存储
3、zset:每个元素有一个score值,其大小决定元素顺序。
4、List、Hash、Set和Zset的元素个数不要超过5000个。
5、del删除一个key,通常认为是O(1)操作。删除一个String类型的key为 O(1),而set、list、hash等都是O(N),N是存储的数据个数。
6、MSET 1 str1 2 str2:多命令参数是原子性的,可以实现多个key的原子性操作。
7、使用pipeline:
a、不是原子性操作,不能保证所有命令执行成功。
b、pipeline可以把不同的命令操作打包在一起,建议单次pipeline的命令个数在50到300之间
8、scan:增量迭代读取大对象,可以取代一些O(N)操作,避免redis长时间被单个slow query阻塞
a、scan命令用于迭代当前database中的所有key,可以优化keys *pattern*操作
b、sscan命令用于迭代set中的key中的元素,可以优化smembers操作。
c、hscan命令用于迭代hash中的所有fields和对应的value,优化hgetall和hkeys操作。
d、zscan命令用于迭代sorted set中的元素(member and score)。
以上是关于Redis中hash、set、zset的底层数据结构原理的主要内容,如果未能解决你的问题,请参考以下文章
Redis—列表(List)集合(Set)哈希(Hash)有序集合 Zset