标签:enc 图片 max log red eval task image 链表
redis哈希对象的底层编码有两种:ziplist、hashtable
当一个哈希键只包含少量kv对、且key和value都是小整数值、短字符串时,redis会使用压缩列表来做
ziplist编码之前介绍过,最初是用在列表对象中的一种编码,在简单的哈希对象中也会用到。有遗忘时参考这里:https://www.cnblogs.com/loveCheery/p/9152144.html
在哈希对象中,采用ziplist编码时:
比如:
127.0.0.1:6379> hset profile name "Tom" (integer) 0 127.0.0.1:6379> hset profile age 25 (integer) 0 127.0.0.1:6379> hset profile career "Programmer" (integer) 1 127.0.0.1:6379> object encoding profile "ziplist"
其压缩列表的内部结果如:
hashtable编码采用字典作为底层实现。底层与1.8之前的jdk中map很相似,为链表数组,但是有自己的rehash条件、扩容收缩规则。
比如我们在上面的profile中插入一项较长字符串的vaule,其编码会转变为hashtable
127.0.0.1:6379> hset profile evaluation "So far as I know, Tom is a very kind boy, the boy u can trust. You can let him to do some tasks with high priority." (integer) 1 127.0.0.1:6379> object encoding profile "hashtable"
内部结构类似于:
hashtable底层字典的插入、查询、对字典有遗忘看这里:https://www.cnblogs.com/loveCheery/p/9133674.html
当对象同时满足这两个条件时,使用ziplist编码:
不满足这两个条件时,转为hashtable编码。
还没验证是否会从hashtable转回ziplist
标签:enc 图片 max log red eval task image 链表
原文地址:https://www.cnblogs.com/loveCheery/p/9166206.html