企查查在线查询网页版,张家港网站优化,网站建设 迅雷下载,用dede做网站去掉版权Redis对基础数据类型进行了封装#xff0c;构建出上层的对象系统#xff0c;这个系统包含#xff1a;字符串对象、列表对象、哈希对象、集合对象和有序集合对象。 Redis对象结构#xff1a; [cce lang”c”] typedef struct redisObject { //类型 unsigned type:4; //编码 … Redis对基础数据类型进行了封装构建出上层的对象系统这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象。 Redis对象结构 [cce lang”c”] typedef struct redisObject { //类型 unsigned type:4; //编码 unsigned encoding:4; //LRU时间 unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ //引用计数 int refcount; //底层实现数据结构的指针 void *ptr; } robj; [/cce] 相关宏定义 [cce lang”c”] #define REDIS_LRU_BITS 24 #define REDIS_LRU_CLOCK_MAX ((1REDIS_LRU_BITS)-1) /* Max value of obj-lru */ #define REDIS_LRU_CLOCK_RESOLUTION 1 /* LRU clock resolution in seconds */ [/cce] Redis对象类型使用type命令查看 [cce lang”c”] /* Object types */ #define REDIS_STRING 0 #define REDIS_LIST 1 #define REDIS_SET 2 #define REDIS_ZSET 3 #define REDIS_HASH 4 //对象编码类型使用object encoding命令 #define REDIS_ENCODING_RAW 0 /* Raw representation */ #define REDIS_ENCODING_INT 1 /* Encoded as integer */ #define REDIS_ENCODING_HT 2 /* Encoded as hash table */ #define REDIS_ENCODING_ZIPMAP 3 /* Encoded as zipmap */ #define REDIS_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */ #define REDIS_ENCODING_ZIPLIST 5 /* Encoded as ziplist */ #define REDIS_ENCODING_INTSET 6 /* Encoded as intset */ #define REDIS_ENCODING_SKIPLIST 7 /* Encoded as skiplist */ [/cce] 不同类型和编码的对象 类型编码对象REDIS_STRINGREDIS_ENCODING_INT使用整数值实现的字符串对象REDIS_STRINGREDIS_ENCODING_EMBSTR这货redis3.0引入的不管REDIS_STRINGREDIS_ENCODING_RAWsds实现的字符串对象REDIS_LISTREDIS_ENCODING_ZIPLIST使用压缩列表实现的列表对象REDIS_LISTREDIS_ENCODING_LINKEDLIST使用双向链表实现的列表对象REDIS_HASHREDIS_ENCODING_ZIPLIST使用压缩列表实现的哈希对象REDIS_HASHREDIS_ENCODING_HT使用字典实现的哈希对象REDIS_SETREDIS_ENCODING_INTSET使用整数集合实现的集合对象REDIS_SETREDIS_ENCODING_HT使用字典实现的集合对象REDIS_ZSETREDIS_ENCODING_ZIPLIST使用压缩列表实现的有序集合对象REDIS_ZSETREDIS_ENCODING_SKIPLIST使用跳跃表想和字典实现的有序集合对象 字符串对象 整数long被保存为int类型 浮点保存为字符串浮点运算INCRYBYFLOATredis先转成浮点进行运算后再转回字符串 列表对象 列表对象同时满足一下两个条件时列表对象使用ziplist编码 列表对象保存的所有字符串元素的长度都小于64个字节list-max-ziplist-value 列表对象保存的元素数量小于512个list-max-ziplist-entries 不能满足条件的都需要使用linkedlist编码。 哈希对象 使用压缩列表键和值分别作为节点按顺序放入列表 使用ziplist的条件 哈希对象保存的所有键值对的键和值的字符串长度小于64个字节hash-max-ziplist-value 哈希对象保存的键值对数量小于512个hash-max-ziplist-entries 集合对象 hashtable编码字典的每个键都是一个字符串对象字典的值全部设置为NULL 使用intset编码条件 集合对象保存的所有元素是整数值 集合对象保存的元素数量不超过512个set-max-intset-entries 不满足条件的集合对象需要使用hashtable编码 有序集合对象 ziplist编码的有序集合每个集合元素使用两个紧挨在一起的压缩节点列表来保存第一个节点保存元素的成员第二个节点保存元素的分值。 skiplist编码的有序集合采用一个skiplist和一个hashtable实现。 使用ziplist编码条件 有序集合保存的元素数量小于128个zset-max-ziplist-entries 有序集合保存的所有元素成员的长度都小于64字节zset-max-ziplist-value 对象共享 Redis在初始化时会创建1w个字符串对象REDIS_SHARED_INTEGERS包含整数0~9999当需要使用这些对象的时候会使用这些对象的引用引用计数而不新创建。 [cce lang”c”] if (value 0 value REDIS_SHARED_INTEGERS) { incrRefCount(shared.integers[value]); o shared.integers[value]; } [/cce] 转载自https://coolex.info/blog/454.html