Redis常见对象有8种:
- 字符串对象 -string
- 列表对象 - list
- 哈希对象-hash
- 集合对象-set
- 有序集合对象-zset
- Bitmap
- Geo
- Hyperloglog
0、Redis对象介绍
Redis中的键值都是用对象表示的,新建键值时,每次都会至少创建两个对象:键对象、值对象。
Redis中的对象redisObject定义如下:
typedef struct redisObject {
unsigned type:4; // 对象类型, string、list、hash、set、zset
unsigned encoding:4; // 编码方式
unsigned lru:LRU_BITS;
int refcount; //引用次数
void *ptr; // 数据指针
} robj;
- 类型type:使用
TYPE key
,会分别输出: string、list、hash、set、zset,对应5种类型的对象。 - encoding:有字符串(int、embstr、raw)、字典(hashtable)、双端链表(linkedlist)、压缩列表(ziplist)、整数集合(intset)、跳跃表和字典(skiplist)。
一、字符串对象(stirng)
字符串对象的编码可以是int、raw、embstr 3种。
1、int:当字符串对象保存整数值时,使用int编码方式,值会保存到ptr属性中(省去了ptr指针占用的空间):
2、raw:当字符串对象保存字符串值,且字符串 > 39字节,使用SDS简单动态字符串来保存,编码方式为raw:
3、embstr:用于保存短字符串(<=39字节)。
与raw编码区别:raw编码会调用两次内存分配函数创建redisObject和sds。embstr只需要调用一次内存分配函数来分配一块连续的空间(减少内存碎片)。
常用操作命令:
set key value
get key
mset key1 value1 keys2 value2
mget key1 key2...
incrby key integer :将key的值 + integer值
dncrby key integer :将key的值 - integer值
二、列表对象(list)
列表对象编码是 ziplist 或 linkedlist。
当列表对象保存的是字符串元素,且:
- 字符串长度 < 64字节
- 字符串个数 < 512个
两者必须满足才会使用ziplist,否则用linkedlist。