Redis中hash、set、zset的底层数据结构原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis中hash、set、zset的底层数据结构原理相关的知识,希望对你有一定的参考价值。

参考技术A

Redis-哈希对象(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

redis manual

第124天学习打卡(Redis Set Hash Zset 三种特殊数据类型 事务 乐观锁)

Redis常用数据结构操作与底层原理

Redis底层数据结构

Redis01_概述安装keyStringList列表Set集合Hash哈希Zset有序集合配置文件详解