redis里hash、set结构底层——ziplist、hashtable、inset

摘自:https://juejin.cn/post/6863258283483807752

仅做个人备份,浏览请看原文

1. hash

hash的底层存储有两种数据结构,一种是ziplist,另外一种是hashtable。

(1) ziplist

hash对象只有同时满足以下条件,才会采用ziplist编码:

  • hash对象保存的键和值字符串长度都小于64字节
  • hash对象保存的键值对数量小于512 ziplist存储的结构如下

当数据量比较小的时候,我们会将所有的key及value都当成一个元素,顺序的存入到ziplist中,构成有序。

2. set

set是一个无序的、自动去重的集合数据类型,Set底层用两种数据结构存储,一个是hashtable,一个是inset。

(1) hashtable

其中hashtable的key为set中元素的值,而value为null

(2) inset

inset为可以理解为数组,使用inset数据结构需要满足下述两个条件:

  • 元素个数不少于默认值512
  • 元素可以用整型表示

查询方式一般采用二分查找法,实际查询复杂度也就在log(n)

猜你喜欢

转载自blog.csdn.net/chushoufengli/article/details/114645709
今日推荐