ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis 存储之 redisObject

2020-06-18 15:56:57  阅读:232  来源: 互联网

标签:存储 ENCODING redis redisObject REDIS Encoded 数据 define


redisObject

redis 是 key-value 存储系统,其中key类型一般为字符串,而 value 类型则为 redis 对象(redisObject)。Redis 对象可以绑定各种类型的数据,譬如 string、list 和set。因此他能很好的将属性和数据分离开。

typedef struct redisObject {
    // 刚刚好32 bits
    // 对象的类型,字符串/列表/集合/哈希表
    unsigned type:4;
    
    // 未使用的两个位
    unsigned notused:2; /* Not used */
  
    // 编码的方式,Redis 为了节省空间,提供多种方式来保存一个数据
    // 譬如:“123456789” 会被存储为整数123456789
    unsigned encoding:4;
  
    // 当内存紧张,淘汰数据的时候用到
    unsigned lru:22; /* lru time (relative to server.lruclock) */
  
    // 引用计数
    int refcount;
  
    // 数据指针
    void *ptr;
} robj;

其中,void *ptr 执行具体的数据。

redisObject 数据的属性

redis.h 中定义了 struct redisObject,它是一个简单优秀的数据结构,因为在 redisObject 中数据属性和数据分开来了,其中,数据属性包括数据类型,存储编码方式,淘汰时钟,引用计数。

数据类型

标记了 Redis 对象绑定的是什么类型的数据,有下面几种可能的值;

字符串

define REDIS_STRING 0

列表

define REDIS_LIST 1

集合

define REDIS_SET 2

有序集合

define REDIS_ZSET 3

哈希

define REDIS_HASH 4

存储编码方式

存储编码方式,一个数据,可以以多种方式存储。譬如,数据类型为 REDIS_SET 的数据编码方式可能为 REDIS_ENCODING_HT,也可能为 REDIS_ENCODING_INTSET。

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 */

淘汰时钟

Redis 对数据集占用内存的大小有实时的计算,当超出限额时,会淘汰超时的数据。

引用计数

一个 Redis 对象可能被多个指针引用。当需要增加或者减少引用的时候,必须调用相应的函数,程序员必须遵守这一准则。因为Redis 是单进程单线程工作的,所以增加/减少引用的操作不必保证原子性,这在 memcache 中是做不到的(memcached 是多线程的工作模式,需要做到互斥)。

ptr

数据指针,真正的数据 保存在 ptr指向的地址。

标签:存储,ENCODING,redis,redisObject,REDIS,Encoded,数据,define
来源: https://www.cnblogs.com/monkey-code/p/13157908.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有