redis对象类型及编码

一、String(字符串)

       底层实现有三种

             1.REDIS_ENCODING_INT                  使用整数值实现的字符串对象

             2.REDIS_ENCODING_EMBSTR         使用embstr编码的简单动态字符串实现的字符串对象

             3.REDIS_ENCODING_RAW                使用简单字符串实现的字符串对象

       三种底层的编码转换

              1. REDIS_ENCODING_INT     整数,存储字符串长度小于21且能够转化为整数的字符串

               2.embstr编码方式和raw编码方式在3.0版本之前是以小于等于39字节为分界的   而在3.2版本之后,则变成了44字节为分界

二、List列表

       底层实现是两种

                1.zipList  压缩列表

                2.linkedList 底层采用双端链表

       编码的转换

                同时满足一下两个条件 使用zipList

                1.列表对象保存的所有元素的长度都小于64字节

                2.列表元素数量小于512个

                不满足使用LinkedList编码

                 以上两个上限可以修改分别是list-max-ziplist-value,list-max-ziplist-entries

三、Hash哈希

         底层实现是两种

                1.zipList  压缩列表

                2.Hashtable 底层实现字典

          编码的转换

                同时满足一下两个条件 使用zipList

                1.哈希对象保存的所有键值对键和值的字符串的长度都小于64字节

                2.哈希对象键值对数量小于512个

                不满足使用hashtable编码

                 以上两个上限可以修改分别是hash-max-ziplist-value,hash-max-ziplist-entries

四、set集合对象

        底层实现是两种

                1.intset压缩列表

                2.Hashtable 底层实现字典

          编码的转换

                同时满足一下两个条件 使用intset

                1.集合对象保存的所有元素都是整数

                2.集合元素数量不超过512个

                不满足使用hashtable编码

                第二个条件可以修改分别是set-max-intset-entries

五、zset有序集合

         底层实现是两种

                1.zipList  压缩列表

                2.skipList   跳跃表

          编码的转换

                同时满足一下两个条件 使用zipList

                1.有序集合保存的元素字符串的长度都小于64字节

                2.有序集合保存的元素数量小于128个

                不满足使用skipList编码

                 以上两个上限可以修改分别是zset-max-ziplist-value,zset-max-ziplist-entries

   

 

 

         本文摘自《redis设计与实现》 黄健宏 著

posted @ 2020-07-06 16:18  wyuioahxvm  阅读(180)  评论(0编辑  收藏  举报