您现在的位置是:主页 > news > 北京市保障性住房建设投资中心网站/网络推广的工作好做吗

北京市保障性住房建设投资中心网站/网络推广的工作好做吗

admin2025/6/13 18:14:03news

简介北京市保障性住房建设投资中心网站,网络推广的工作好做吗,山东鲁为建设集团网站,广东专业网站客服软件定制Redis使用对象来表示数据库中的键和值,每次当我们在Redis数据库中新创建一个键值对时,我们会至少会创建两个对象,一个是键对象,另一个是值对象。 typedef struct redisObject {// 类型unsigned type:4;// 编码unsigned encoding:…

北京市保障性住房建设投资中心网站,网络推广的工作好做吗,山东鲁为建设集团网站,广东专业网站客服软件定制Redis使用对象来表示数据库中的键和值,每次当我们在Redis数据库中新创建一个键值对时,我们会至少会创建两个对象,一个是键对象,另一个是值对象。 typedef struct redisObject {// 类型unsigned type:4;// 编码unsigned encoding:…

Redis使用对象来表示数据库中的键和值,每次当我们在Redis数据库中新创建一个键值对时,我们会至少会创建两个对象,一个是键对象,另一个是值对象。

typedef struct redisObject {// 类型unsigned type:4;// 编码unsigned encoding:4;// 对象最后一次被访问的时间unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */// 引用计数int refcount;// 指向实际值的指针void *ptr;} robj;

Redis的对象类型共有五种

/* Object types */
// 对象类型
#define REDIS_STRING 0
#define REDIS_LIST 1
#define REDIS_SET 2
#define REDIS_ZSET 3
#define REDIS_HASH 4

对象由什么样的数据结构存储,取决于encoding的值,ptr指向实际的数据结构

// 对象编码
#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 */
#define REDIS_ENCODING_EMBSTR 8  /* Embedded sds string encoding */

字符串对象

1. 字符串对象的编码可以是int,raw,embstr

比如

SET number 10086

那么字符串就是用int编码,对应的底层数据结构为long

2.  如果string的长度大于39,那么就用编码为RAW,底层数据结构是SDS

3. 如果string的长度小于39,那么就会用EMBSTR编码, 底层数据结构也是SDS

这些编码方式可以互相转换。

 

列表对象

1. 列表对象可以用ziplist或者linkedlist编码,底层分别是压缩列表和双向链表。

 

哈希对象

ziplist和hashtable

 

集合对象

intset和hashtable

 

有序集合

ziplist和skiplist

 

对象通过引用技数实现内存回收。

 

重点总结:

1. Redis数据库中的每个key和value都是一个对象

2. Redis有String, Hash, List, Set, ZSet五种类型的对象,每种对象有两种以上的编码方式,可以在不同场景下优化。

3. 服务器在执行命令时,会先检查对象类型

4. Redis对象内存管理采用引用计数

5. Redis会共享0到9999的字符串对象

5. 对象会记录最后一次访问时间,用于LRU。