转载

Redis Highlights (1) Redis中的类型和数据结构

Redis中的类型和数据结构

redis对外有5中基本类型,分别是string t_string.c , list t_list.c , hash t_hash.c , set t_set.c 和 zset (ordered set) t_zset.c . 这5种类型是“接口”而不是“实现”,因此redis得以根据不同的情形自由选择不同数据结构的实现,这也是redis在设计上的高明之处。

5种基本类型对应了int object.c , embstr object.c , raw sds.c , linkedlist adlist.c , ziplist ziplist.c , skiplist t_zset.c , ht dict.c , intset intset.c 这8种数据结构的实现。

类型与数据结构实现的对应关系如图。

Redis Highlights (1) Redis中的类型和数据结构

实用 type KEYNAME 可以查看某个key对应的类型,而 object encoding KEYNAME 可以查看该key内部的实现。

string

string 有三种实现方式,分别是 int , embstrraw . 长度比较短的整数会使用 int 实现。长度比较短的字符串会使用 embstr , 更长的会使用 rawembstrraw 的区别在于, embstrredisObjectsds 放在一块连续空间里面,这样申请内存和释放内存都只需要一次调用。带来的坏处是, embstr 是只读的,如果调用 append 等操作则自动升级为 raw

对于 int 实现的string,如果调用 strlengettrange 等会产生额外开销。如果需要强制使用 raw 来实现, 可以用 setrange

zset

zset在元素较少时,使用 intset 实现。 在元素较多时,使用 skiplistdict 一起实现。其中 skiplist 用于提供顺序相关的操作,而 dict 用于快速查询score.

原文  http://blog.codescv.com/redis/2016/12/11/redis-types.html
正文到此结束
Loading...