首页 > 数据库 >深入刨析Redis存储技术设计艺术(一)

深入刨析Redis存储技术设计艺术(一)

时间:2024-07-06 13:29:52浏览次数:13  
标签:redisObject obj 16 刨析 存储技术 Redis unsigned lfu lru

一、RedisObject

1.1、Redis数据存储

1.2、RedisObject的数据结构

redis的value都封装在redisObject中

redisObject的底层实现:

redisObject的数据结构如下:

server.h

typedef struct redisObject {
    unsigned type:4;
    unsigned encoding:4;
    unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or
                            * LFU data (least significant 8 bits frequency
                            * and most significant 16 bits access time). */
    int refcount;
    void *ptr;
} robj;
  • type:4bit,表示value的类型 obj_string:字符串 0 obj_list:列表 1 obj_set :集合 2 obj_zset : 有序集合 3 obj_hash: 散列 4 obj_module: 模块 5 obj_stream 流 6

  • encoding:4bit,表示value内部存储的编码 10大编码 String: raw(0)、int(1)、embstr(8) hash: ht(2)、zipmap(3)、ziplist(5) list: quicklist(9) zet: intset(6)、ziplist(5) zset: skiplist(7) stream: listpack(10)

  • lru(lfu):24bit,lru表示最后一次访问时间,lfu高16位表示分钟级别的访问时间,低8位表示访问频率

  • refcount:被引用的计数 共享对象:共享值相同的对象

    共享对象一般是整数,不做字符串的

    整数判断相同 判断值 : O(1)

    字符串判断相同 判断内容 O(n)

  • ptr:指向具体数据的指针

1.3、API解析

object.c

createObject

创建对象:

  1. 申请内存

  2. 初始化属性

  3. 如果内存策略是lfu,则赋值lru属性为unix时间取低16位

  4. 否则取unix秒级时间戳

  5. 返回对象指针

标签:redisObject,obj,16,刨析,存储技术,Redis,unsigned,lfu,lru
From: https://blog.csdn.net/jy739761380/article/details/140199437

相关文章

  • Redis 清理日志文件的策略
    目录Redis清理日志文件的策略1.Redis日志文件2.日志清理策略定期归档压缩归档文件设置日志文件大小限制注意事项结论Redis清理日志文件的策略在使用Redis时,日志文件可能会不断增长,占用磁盘空间。为了保持良好的系统性能和合理利用磁盘空间,我们需要实施一定的......
  • Redis怎么删除某个目录下的数据
    目录Redis怎么删除某个目录下的数据介绍步骤步骤1:连接到Redis步骤2:列出目录下的所有键步骤3:删除目录下的所有键步骤4:验证数据是否删除成功总结Redis怎么删除某个目录下的数据介绍在使用Redis进行缓存或数据存储时,有时候我们需要删除特定目录下的数据。本......
  • redis7.2 安装部署
    #redis7.2安装部署https://redis.io/download/https://github.com/redis/redis/tree/7.2wgethttps://github.com/redis/redis/archive/7.2.3.tar.gzredis-7.2.3]#yum-yinstallgccgcc-c++systemd-develuseraddredis-s/sbin/nologin-M#编译,生成system......
  • 面试必会之Redis篇
    01-你们项目中哪里用到了Redis?在我们的项目中很多地方都用到了Redis,Redis在我们的项目中主要有三个作用:使用Redis做热点数据缓存/接口数据缓存使用Redis存储一些业务数据,例如:验证码,用户信息,用户行为数据,数据计算结果,排行榜数据等使用Redis实现分布......
  • Redis 7.x 系列【19】管道
    有道无术,术尚可求,有术无道,止于术。本系列Redis版本7.2.5源码地址:https://gitee.com/pearl-organization/study-redis-demo文章目录1.往返时间2.管道技术3.代码演示4.其他批处理4.1原生批处理命令4.2事务4.3脚本1.往返时间官方文档Redis是一种基......
  • 安装Redis出现的问题
    当我使用brew下载redis时系统:macOS14$brewinstallredis报错信息:Error:git:unknownorunsupportedmacOSversion::dunnoError:'git'mustbeinstalledandinyourPATH!Warning:YouareusingmacOS14.Wedonotprovidesupportforthispre-releaseve......
  • Redis快速上手
    Redis检查Redis是否安装$redis-server--versionRedisserverv=7.2.4sha=00000000:0malloc=libcbits=64build=2d86b7859915655e如果成功安装,则会显示Redis的版本号。启动RedisMac:终端输入:$redis-serverWin:终端输入:$redis-server.exe启动后显示版本号和端口......
  • Redis数据结构-字典的实现
    字典,又称符号表(symboltable)、关联数组(associativearray)或者映射(map),是一种用于保存键值对(key-valuepair)的抽象数据结构。在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和值就被称为键值对。字典中的每个键都是独一无二的,程序可以在字典......
  • 谷粒商城学习-11-docker安装redis
    文章目录一,拉取Redis镜像1,搜索Redis的Docker镜像2,拉取Redis镜像3,查看已经拉取的镜像二,创建、启动Redis容器1,创建redis配置文件2,创建及运行Redis容器3,使用dockerps查看运行状态的容器4,验证容器是否可用三,修改Redis配置文件一,拉取Redis镜像1,搜索Redis的Docker镜像......
  • Redis详解
    Redis是一个开源的内存数据库,它属于NoSQL数据库的一种,以其高性能、支持丰富的数据结构、持久化特性、复制、集群以及发布/订阅等特性而闻名。以下是Redis的详细说明:一、Redis的基本介绍定义:Redis(RemoteDictionaryServer)是一个高性能的键值对存储系统,它可以用于缓存、消息队......