五种对象
对象总共有五种,可以用type 命令查看数据库键对应的值对象的类型。
不同类型可能对应不同的编码格式,可以使用 object encoding key 来查看。
embstr编码的字符串对象是只读的。如果要修改,会先转换编码为 raw,然后修改。同时,对象就变成了 raw 类型的。
字符串对象
可以使用 append 命令,将非 raw 类型的对象转化为 raw类型。
列表对象
列表对象的编码可以是 ziplist 或者 linkedlist。
哈希对象
哈西对象的编码可以是 ziplist 或者hashtable。
集合对象
集合对象的编码可以是 intset 或者 hashtable。
有序集合对象
有序集合对象的编码可以是 ziplist 或者 skiplist。
内存回收
C 语言并不存在自动内存回收功能,Redis 实现了一个基于引用计数的内存回收机制。
redis 对象有一个属性 lru,记录了对象最后一次被访问的时间。可以使用object idletime key 来查看给定键的空转时长(根据 lru 计算得到)。当内存超过了 maxmemory,空转时长较高的对象会优先被回收。
对象共享
redis会共享值为 0 到 9999 的字符串对象。