• Redis学习笔记之Redis的对象


      类型与编码:

      typedef struct redisObject {

                    unsigned type:4;//类型

                    unsigned encoding:4;//编码

                    void *ptr;//指向底层实现数据结构的指针

      } robj;

    1.字符串对象

      编码: int,整数值,而且这个整数值可以用long类型来表示

      raw,字符串值,而且字符串值的长度大于32字节,SDS的内存与redisObject内存不连续

      embstr,字符串值,而且字符串值的长度小于32字节,SDS的内存与redisObject内存是连续的

             编码转换:当对字符串进行操作时引起字符串类型变化,那么字符串对象的编码也会随即改变,比如在一个10后面加上“days ago”,那么字符串的编码将从int变为raw

    2.列表对象

      编码: ziplist,需满足以下两个条件1)列表对象保存的所有字符串元素的长度都小于64字节(可修改);2)列表对象保存的元素数量小于512个(可修改)

                linkedlist,不满足上述两个条件的列表对象编码都采用linkedlist

      笔者实际操作之后发现,不管什么情况,结果都如下:

      127.0.0.1:6379> object encoding test

      "quicklist"

             quicklist:A doubly linked list of ziplists,一个ziplist的双向链表

    3.哈希对象

      编码: ziplist,先将一个键值对的键推到表尾,然后将这个键值对的值推到表尾,同样需要满足以下两个条件1)哈希对象保存的所有键值对的键和值得字符串长度都小于64(可修改)字节2)哈希对象保存的键值对的数量小于512(可修改)

          hashtable,底层采用字典实现

    4.集合对象

      编码:intset,集合对象使用整数集合作为底层实现,条件1)集合对象保存的所有元素都是整数2)集合对象保存的元素个数不超过512个

          hashtable,使用字典作为底层实现,字典的每一个值都是一个字符串对象,每个字符串对象都包含一个集合元素,字典的值全部为null

    5.有序集合对象

      编码:ziplist,使用压缩列表作为底层实现,要求1)有序集合保存的元素数量小于128,2)有序集合保存的所有元素成员的长度都小于64字节

          skiplist,使用zset作为底层实现,一个zset结构同时包含一个字典和一个跳跃表;同时使用字典和跳跃表是为了1)保留字典以O(1)的时间复杂度查找成员的分值这一特性2)保留跳跃表执行范围型操作的优点

  • 相关阅读:
    Zepto源码分析-动画(fx fx_method)模块
    CSS3用法理解
    移动端网页meta设置和响应式
    javascript基础-正则表达式
    net core 2.x
    angular
    .net core 2.x
    .net core 2.x
    DDD
    DDD
  • 原文地址:https://www.cnblogs.com/songxh-scse/p/6692433.html
Copyright © 2020-2023  润新知