建议先关注、点赞、收藏后再阅读。
Redis的对象类型有以下几种:
1. 字符串类型(string):
存储字符串,通常被用作缓存、计数器等。字符串类型的编码方式有raw、int、embstr和embstr_moved。
- raw:存储的字符串可以是任意字符。
- int:将字符串当作整数来存储,当字符串可以被解析为整数时使用。
- embstr:如果字符串长度小于等于39字节且不包含'\0'字符,则使用这种方式存储。
- embstr_moved:占位编码,表示该对象所存储的字符串已被迁移到其他地方。
2. 列表类型(list):
由多个字符串组成的有序列表。列表类型的编码方式有ziplist和linkedlist。
- ziplist:压缩列表,将多个字符串按一定格式连续存储在一起,节省内存。
- linkedlist:双向链表,每个节点存储一个字符串。
3. 哈希类型(hash):
键值对集合,其中每个键都是唯一的。哈希类型的编码方式有zipmap和hashtable。
- zipmap:压缩字典,将键值对按一定格式连续存储在一起,兼具压缩和速度优势。
- hashtable:字典,使用哈希表实现。
4. 集合类型(set):
无序的字符串集合,不允许重复元素。集合类型的编码方式有intset和hashtable。
- intset:整数集合,当集合中的元素都为整数且个数不超过512时使用。
- hashtable:字典,使用哈希表实现。
5. 有序集合类型(sorted set):
有序的字符串集合,不允许重复元素,每个元素关联一个分数。有序集合类型的编码方式有ziplist和skiplist。
- ziplist:压缩列表,将元素和分数按一定格式连续存储在一起。
- skiplist:跳跃表,同时使用有序链表和多层索引的数据结构。
Redis对象的共享结构和非共享结构如下:
- 共享结构:
字符串类型的编码方式为int和embstr时,Redis对象采用共享结构。多个对象可以共享同一个字符串值,以节省内存。当有被引用的字符串被修改时,会进行复制操作。 - 非共享结构:
其他类型的对象和字符串类型的编码方式为raw和embstr_moved时,Redis对象采用非共享结构。每个对象都保存自己的值,修改不会影响到其他对象。
以上就是Redis的对象类型及其编码方式,以及Redis对象的共享结构和非共享结构的介绍。