Redis存储结构
2017-04-12 13:20
204 查看
Redis现在是比较流行的缓存数据库,一般刚接触的时候都会发现其可以存储字符串(string)、哈希表(hash)、列表(list)、集合(set)、有序集合(sorted set)等。redis是一个key-value存储,value可以包含上面列出的多种结构,但是key都是字符串。也就是说key是string类型,value为上面类型的一种。
由于以上每种数据结构的存储指令在redis中都不一样,单个看来想要使用redis必须要先区分要存储的对象的结构,然后选择相应的指令。但是这样使用起来确实是很不利的,如果一次要存入多种形式的值,我就要实现多种存储方式。
为了便于开发和使用redis引入了对象,即对象存储。上面的每种数据结构都是一种对象,所以,在项目中只需要实现对象的存储即可。
Redis中每个对象都有一个redisObject结构,该结构中和保存数据相关的三种属性分别是存储数据的类型type、值的编码属性encoding和指针ptr属性:
获取存储值的类型编码指令:
TYPE key
如,我在redis中存入一个字符串的值:
redis中的示例:
参考书籍:《Redis设计与实现》
由于以上每种数据结构的存储指令在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_EMBSTR | embstr编码的简单动态字符串(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 |
[root@iZ8vb8r420ejxfron03cj7Z ~]# redis-cli 127.0.0.1:6379> set msg "rhett" OK 127.0.0.1:6379> object encoding msg "embstr"
参考书籍:《Redis设计与实现》
相关文章推荐
- 高性能Web应用的优化技术
- 理解锁以及分布式锁
- Pedis: NoSQL data store using the SEASTAR framework, compatible with Redis
- redis安装问题小结
- spring中Redis的集群简单实现
- 认识存储:块、文件和对象
- 通过更换硬盘舱位的方式解决存储问题
- Tomcat端口被占用解决方法(不用重启)
- 使用 Redis 和 Python 构建一个共享单车的应用程序
- Redis偶发连接失败案例实战记录
- “传奇”图象数据存储方式
- C#数据结构之顺序表(SeqList)实例详解
- Redis中实现查找某个值的范围
- win 7 安装redis服务【笔记】
- redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- Redis和Memcached的区别详解