Redis存储结构

Redis现在是比较流行的缓存数据库,一般刚接触的时候都会发现其可以存储字符串(string)、哈希表(hash)、列表(list)、集合(set)、有序集合(sorted set)等。redis是一个key-value存储,value可以包含上面列出的多种结构,但是key都是字符串。也就是说key是string类型,value为上面类型的一种。

由于以上每种数据结构的存储指令在redis中都不一样,单个看来想要使用redis必须要先区分要存储的对象的结构,然后选择相应的指令。但是这样使用起来确实是很不利的,如果一次要存入多种形式的值,我就要实现多种存储方式。

为了便于开发和使用redis引入了对象,即对象存储。上面的每种数据结构都是一种对象,所以,在项目中只需要实现对象的存储即可。

Redis中每个对象都有一个redisObject结构,该结构中和保存数据相关的三种属性分别是存储数据的类型type、值的编码属性encoding和指针ptr属性:

typedef struct redisObject{
//类型
unsigned type:4;

//编码
unsigned encoding:4;

//指向底层实现数据结构的指针
void *ptr

//虚拟内存和其他信息等.....
}robj;
类型常量对象的名称type值
REDIS_STRING字符串对象string
REDIS_LIST列表对象list
REDIS_HASH哈希对象hash
REDIS_SET集合对象set
REDIS_ZSET有序集合对象zset

获取存储值的类型编码指令:
TYPE key

如,我在redis中存入一个字符串的值:

[root@iZ8vb8r420ejxfron03cj7Z ~]# redis-cli
127.0.0.1:6379> set msg "rhett"  
OK
127.0.0.1:6379> get msg
"rhett"
127.0.0.1:6379> type msg
string
编码常量对象的名称type值
REDIS_ENCODING_INT整数int
REDIS_ENCODING_EMBSTRembstr编码的简单动态字符串(SDS)list
REDIS_ENCODING_RAW简单动态字符串raw
REDIS_ENCODING_HT字典hashtable
REDIS_ENCODING_LINKEDLIST双端链表linkedlist
REDIS_ENCODING_ZIPLIST压缩列表ziplist
REDIS_ENCODING_INTSET整数集合intset
REDIS_ENCODING_SKIPLIST跳跃表和字典skiplist

redis中的示例:

[root@iZ8vb8r420ejxfron03cj7Z ~]# redis-cli
127.0.0.1:6379> set msg "rhett"  
OK
127.0.0.1:6379> object encoding msg
"embstr"

参考书籍:《Redis设计与实现》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值