Redis—对象
redis对象
redis
中的每个对象都由redisObject
结构表示:
typedef struct redisObject { |
类型常量 | 对象名称 |
---|---|
REDIS_STRING | 字符串对象 |
REDIS_LIST | 列表对象 |
REDIS_HASH | 哈希对象 |
REDIS_SET | 集合对象 |
REDIS_ZSET | 有序集合对象 |
redis对象
可能使用的底层实现。
类型 | 编码 | 对象 |
---|---|---|
REDIS_STRING | REDIS_ENCODING_INT | 使用整数值实现的字符串对象 |
REDIS_STRING | REDIS_ENCODING_EMBSTR | 使用embstr编码的简单动态字符串实现的字符串对象 |
REDIS_STRING | REDIS_ENCODING_RAW | 使用简单动态字符串实现的字符串对象 |
REDIS_LIST | REDIS_ENCODING_ZIPLIST | 使用压缩列表实现的列表对象 |
REDIS_LIST | REDIS_ENCODING_LINKEDLIST | 使用双端链表实现的列表对象 |
REDIS_HASH | REDIS_ENCODING_ZIPLIST | 使用压缩列表实现的哈希对象 |
REDIS_HASH | REDIS_ENCODING_HT | 使用字典实现的哈希对象 |
REDIS_SET | REDIS_ENCODING_INTSET | 使用整数集合实现的集合对象 |
REDIS_SET | REDIS_ENCODING_HT | 使用字典实现的集合对象 |
REDIS_ZSET | REDIS_ENCODING_ZIPLIST | 使用压缩列表实现的有序集合对象 |
REDIS_ZSET | REDIS_ENCODING_SKIPLIST | 使用跳表实现的有序集合对象 |
查看数据库键的值对象:
type
查看数据库键的值对象的编码:
OBJECT ENCODING
字符串对象
字符串对象的编码可以是int
、embstr
或raw
。
如果字符串对象保存的是一个字符串值,且长度小于等于32字节,那么则使用embstr
编码。embstr
编码是专门用于保存短字符串的一种优化编码方式,这种编码和raw
编码一样,都使用redisObject
结构和sdshdr
结构来表示字符串对象,但raw
编码会调用两次内存分配函数来分别创建redisObject
结构和sdshdr
结构,而embstr
编码则通过调用一次内存分配函数来分配一块连续的空间,空间依次包含redisObject
和sdshdr
两个结构。
简单命令
创建一个字符串对象:
set name test
查看字符串对象:
get name
列表对象
列表对象的编码可以是ziplist
或linkedlist
。
创建一个列表对象:
RPUSH numbers 1 “three” 5
高版本redis
(5.0)中的ziplist
编码被listpack
编码取代。listpack
的优势:
- 简化设计:去掉
prevlen
和zltail
,提高了操作的稳定性 - 性能优化:避免频繁的内存调整,插入、删除和遍历的性能更加平稳
- 更强的扩展性:支持更大数据范围和更高效的内存使用
简单操作命令
将元素推入列表表头:
LPUSH list 1 “zhang” 2
将元素推入列表表尾:
RPUSH list 3
查看列表对象:
LRANGE list 0 -1
1) "1" |
删除列表表头节点:
LPOP list
删除列表表尾节点:
RPOP list
查看列表节点保存的值:
LINDEX list 0
"jiang" |
查看列表长度:
LLEN list
修改列表节点中的值:
LSET list 0 “zhang”
哈希对象
哈希对象的编码可以是ziplist
或字典。存储键值对,键是字符串,值也是字符串。
简单操作命令
添加数据到哈希对象中:
HSET ht name jiang
获取哈希对象中的数据:
HGET ht name
"jiang" |
判断哈希对象中的某个键是否存在:
HEXISTS ht name
1 |
删除哈希对象中的指定键:
HDEL ht name
获取哈希对象中键值对数量:
HLEN ht
获取哈希对象的所有数据:
HGETALL ht
1) "name" |
集合对象
集合对象的编码可以是inset
或字典。存储键值对,值是null
。
简单操作命令
往集合中添加新元素:
SADD set name
获取集合中元素数量:
SCARD set
查找元素是否在集合中:
SISMEMBER set name
获取集合中所有元素:
SMEMBERS set
删除集合中指定元素:
SREM set name
有序集合对象
有序集合的编码可以是ziplist
或skiplist
。
跳表编码的有序集合对象使用zset
结构作为底层实现,一个zset
结构同时包含一个字典和一个跳跃表。跳表按照分值从小到大保存所有集合元素,除此之外,zset
结构中的字典为有序集合创建一个从成员到分数的映射。
简单操作指令
添加新元素到有序集合对象:
ZADD zset 2 apple 3 banana
获取元素个数:
ZCARD zset
统计分值在给定范围内节点数目:
ZCOUNT zset 1 5
返回给定索引范围内的所有元素:
ZRANGE zset 0 1
1) "apple" |
删除给定成员节点:
ZREM zset apple
查看给定成员分数:
ZSCORE zset banana