您的位置:首页 > 其它

对象

2016-05-25 16:55 162 查看
Redis 用到的所有主要数据结构:简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合, 等等。

Redis 并没有直接使用这些数据结构来实现 键值对数据库, 而是基于这些数据结构创建了一个对象系统,包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象, 每种对象都用到了至少一种我们前面所介绍的数据结构。

除此之外, Redis 的对象系统还实现了基于引用计数技术的内存回收机制: 当程序不再使用某个对象的时候, 这个对象所占用的内存就会被自动释放; 另外, Redis 还通过引用计数技术实现了对象共享机制, 这一机制可以在适当的条件下, 通过让多个数据库键共享同一个对象来节约内存。

最后, Redis 的对象带有访问时间记录信息, 该信息可以用于计算数据库键的空转时长, 在服务器启用了 maxmemory 功能的情况下, 空转时长较大的那些键可能会优先被服务器删除。

Redis 中的每个对象都由一个 redisObject 结构表示, 该结构中和保存数据有关的三个属性分别是 type 属性、 encoding 属性和 ptr 属性:

typedef struct redisObject {

// 类型
unsigned type:4;

// 编码
unsigned encoding:4;

// 对象最后一次被访问的时间
unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */

// 引用计数
int refcount;

// 指向实际值的指针
void *ptr;

} robj;


对象 对象type属性的值 TYPE 命令的输出

字符串对象 REDIS_STRING “string”

列表对象 REDIS_LIST “list”

哈希对象 REDIS_HASH “hash”

集合对象 REDIS_SET “set”

有序集合对象 REDIS_ZSET “zset”

1、字符串对象

详见:http://redisbook.com/preview/object/string.html

2、列表对象

详见:http://redisbook.com/preview/object/list.html

3、hash对象

详见:http://redisbook.com/preview/object/hash.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: