对象的类型与编码

版本是2.6
对象的编码
不同类型的编码对象

版本3.2及以上5.06中:

  • OBJ_ENCODING_RAW: string类型内部结构,最原生的表示方式。其实只有string类型才会用这个encoding值(表示成sds)。
  • OBJ_ENCODING_INT: string类型内部结构,表示成数字。实际用long表示。
  • OBJ_ENCODING_HT: hash&set内部类型,表示成dict。
  • OBJ_ENCODING_ZIPMAP: 是个旧的表示方式,已不再用。在小于Redis 2.6的版本中才有。
  • OBJ_ENCODING_LINKEDLIST: list类型内部结构,也是个旧的表示方式,已不再用。
  • OBJ_ENCODING_ZIPLIST: list&hash&zset类型内部结构,表示成ziplist。
  • OBJ_ENCODING_INTSET: 整数set内部类型,表示成intset。用于set数据结构。
  • OBJ_ENCODING_SKIPLIST: zset内部类型,表示成skiplist。用于sorted set数据结构。
  • OBJ_ENCODING_EMBSTR: string类型内部结构,表示成一种特殊的嵌入式的sds。
  • OBJ_ENCODING_QUICKLIST: list类型内部结构,表示成quicklist。用于list数据结构。
  • OBJ_ENCODING_STREAM: list类型内部结构,编码为列表包的基数树
    更多string多余空间回收等查看详解版:http://zhangtielei.com/posts/blog-redis-robj.html

内存回收

redis采用引用计数技术和LRU算法实现内存回收,详情https://www.cnblogs.com/WJ5888/p/4371647.html;

对象共享不单单字符串建使用,那些在数据结构潜逃了字符串对象的对象(linkedlist、hashtable、zset、)都可以使用这些共享对象。

对象空转时长
对象空转时长

最大内存淘汰策略

线上最大内存淘汰策略(maxmemory_policy)默认为volatile-lru。
Redis共提供8种数据淘汰策略:

  • volatile-lru: 从设置过期时间的key中挑选最近最少使用的key淘汰;
  • volatile-ttl: 从设置过期时间的key中挑选即将过期的key淘汰;
  • volatile-random: 从设置过期时间的key中任意挑选key淘汰;
  • volatile-lfu: 从设置过期时间的key中挑选使用频率最低的key淘汰;
  • allkeys-lru: 从所有key中挑选最近最少使用的数据淘汰;
  • allkeys-lfu: 从所有key中挑选使用频率最低的键淘汰;
  • allkeys-random: 从所有key中任意挑选key淘汰;
  • no-enviction: 禁止驱逐数据,当redis内存使用打到maxmemory,在该策略下,直接返回错误;

更多源码注释说明见server.hhttps://github.com/dalaizhao/redis/tree/feature_code_comment