redis保存数据的结构-redisobject结构体

在redis中,所有键值对的保存,都是机遇redisboject的一个结构体,如下

typedef struct redisObject {
    unsigned type:4;         
    unsigned encoding:4;         
    unsigned lru:LRU_BITS;   
    int refcount;            
    void *ptr;               
};

type:记录了当前数据的数据类型,其中包括

REDIS_STRING:

字符串类型是 Redis 中最基本的数据类型,可以存储任何形式的字符串或二进制数据,例如文本数据或二进制图片数据。

REDIS_LIST:

列表类型用于存储一系列的字符串,按照插入顺序排序。列表是双向链表,支持在其头部或尾部高效地进行添加或删除操作。

REDIS_SET:

集合是由字符串组成的无序集,集合中的元素是唯一的。Redis 提供了一系列操作集合的命令,比如添加、删除元素,以及计算交集、并集和差集等。REDIS_ZSET (sorted set):

有序集合类似于集合,但每个元素都会关联一个浮点数分数值,Redis 根据分数来为集合中的元素进行从小到大的排序。有序集合适用于需要按范围查询或排序的场景。

REDIS_HASH:

哈希是键值对的集合,这里的键和值都是字符串类型。这种数据结构适合存储对象(例如表示用户的多个字段)。

这些类型是redis的基本类型

encoding:定义了内部存储数据的编码格式,每个类型的数据都有不同的编码格式,如下

REDIS_STRING:

REDIS_ENCODING_RAW: 用于存储字符串数据的动态字符串(SDS, Simple Dynamic String)。这是最常见的编码方式,适用于普通的字符串操作。

REDIS_ENCODING_INT: 当字符串内容可以被解析为整数时使用,可以直接将值存储为 C 语言的整型。这种方式在处理数字操作时内存效率更高。

REDIS_ENCODING_EMBSTR: 用于存储短字符串(通常小于 44 字节),这种编码方式可以减少内存分配的开销,因为对象元数据和字符串数据可以在同一内存块中连续存储。

REDIS_LIST:

REDIS_ENCODING_LINKEDLIST: 使用双向链表存储列表元素,适合于元素数量较大或者元素添加删除频繁的场景。

REDIS_ENCODING_ZIPLIST: 压缩列表是一种紧凑的内存结构,用于存储较小的列表。当列表中的元素较小且数量不多时,使用压缩列表可以节省内存。

REDIS_SET:

REDIS_ENCODING_HT: 使用哈希表存储集合元素,这适合元素数量较大的场景,可以快速进行元素查找、添加和删除。

REDIS_ENCODING_INTSET: 整数集合用于存储只包含整数的集合,当所有元素都是整数且数量不多时,使用整数集合可以节省内存。

REDIS_ZSET:

REDIS_ENCODING_ZIPLIST: 压缩列表同样可以用于存储有序集合,当元素数量少且每个元素的大小较小时使用。

REDIS_ENCODING_SKIPLIST: 跳跃表(和哈希表结合)用于存储较大的有序集合,可以提供快速的元素访问和范围查询性能。

REDIS_HASH:

REDIS_ENCODING_ZIPLIST: 压缩列表用于存储小型哈希,当字段和值的大小较小且数量较少时,使用压缩列表可以节约内存。

REDIS_ENCODING_HT: 使用哈希表来存储较大的哈希,适合于字段数量较多或数据大小较大的情况。

lru:LRU_BITS:

在LFU算法相关的内存淘汰策略下,表示该数据访问次数频率的多少,但不是具体的访问次数,他会计算1/(lru现在的指*ifu_log_factor(默认是10) + 1),并且拿出一个0-1的随机数判断是否小于这个值,如果小于则会加一,这样来看,除了第一次一定加一,随着lru越来越大,增大的概率也越来越小,这样做也是为了节省内存,并且仍然能够体现出最近访问次数频率的多少,没过一段时间还会减少1,默认是1分钟。

而在LRU算法相关的内存淘汰策略下这个属性则记录的是一个最近访问时间的时间戳

这个属性主要用于内存淘汰时的比较

refcount:记录当前数据被引用次数,如果为零,则可以被回收

*ptr:记录真正数据的指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/592647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue按照顺序实现多级弹窗(附Demo)

目录 前言1. 单个弹窗2. 多级弹窗 前言 强化各个知识点,以实战融合,以下两个Demo从实战提取 1. 单个弹窗 部署按钮框以及确定的方法即可 截图如下所示: 以下Demo整体逻辑如下: 点击“生成周月计划”按钮会触发showWeekPlanDia…

FLIR LEPTON3.5 热像仪wifi 科研实验测温采集仪

点击查看详情!点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情点击查看详情 1、描述 这是一款桌面科研实验测温热成像多功能热像记录仪,小巧轻便…

STM32微秒级别延时--F407--TIM1

基本配置: TIM1挂载在APB2总线上,150MHz经过15分频,得到10MHz计数频率,由于disable了自动重装载,所以只需要看下一次计数值是多少即可。 void TIM1_Delay_us(uint16_t us) //使用阻塞方式进行延时,ARR值不…

记录vue报错问题 in ./node_modules/axios/lib/platform/index.js

今天这个问题困扰了我许久 报错内容如下: 最初一直以为是我没装axios,又重新装了一次,后面才发现是axios版本原因,真的总是被版本的原因困住真的很烦 解决方法如下: 将axios的版本改为1.5.0 1、打开项目的文件夹“…

Linux命令--查找占磁盘空间最大的文件

原文网址:Linux命令--查找占磁盘空间最大的文件-CSDN博客 简介 本文介绍Linux怎样查找占磁盘空间最大的文件。 1.找到占空间最大的分区 命令 df -h 结果 2.查找分区里最大的文件 法1:直接查找最大的文件 sudo find my_folder -type f -exec du -…

LangChain-RAG学习之 LangChain框架入门

什么是LangChain LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

使用FastGPT+OneAPI在本地使用Llama3

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!他的重要特点就是工作流编排。 工作流编排:基于 Flow 模块的工作…

OneNote导出白色背景文件时将笔记墨迹转换颜色

今天用OneNote导出笔记时发现在文件上做的黑色墨迹笔记全部转成了白色。推测是因为onenote会根据背景色自动转换黑色和白色的墨迹,但是其他颜色好像导出的时候不会转换。 于是,我们首先要转换背景,将黑色背景转成白色背景, 然后将…

国内各种免费AI聊天机器人(ChatGPT)推荐(中)

作者主页:点击! 国内免费AI推荐(ChatGPT)专栏:点击! 创作时间:2024年4月29日15点20分 随着人工智能技术的不断发展,AI聊天机器人已经逐渐融入我们的日常生活。它们可以提供各种服务,例如聊天、…

【数据结构】链表专题2

前言 本篇博客继续探讨有关链表的专题,这片博客的题,提前打个预防针,有点意思哦,哈哈哈,话不多说,进入正文 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论…

【C语言】分支和循环(上)

【C语言】分支和循环(上) 1、if语句1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2、关系操作符3、条件操作符4、逻辑操作符:与、或、非(取反)(&&,||,&#xff0…

小程序引入 Vant Weapp 极简教程

一切以 Vant Weapp 官方文档 为准 Vant Weapp 官方文档 - 快速入手 1. 安装nodejs 前往官网下载安装即可 nodejs官网 安装好后 在命令行(winr,输入cmd)输入 node -v若显示版本信息,即为安装成功 2. 在 小程序根目录 命令行/终端…

mac nvm install node<version> error 404

mac m2芯片遇到的问题,估计m系列的应该也有这个问题,在这里记录一下 解决方案: ## 需要先处理一下兼容就OK了arch -x86_64 zsh nvm install returns curl: (22) The requested URL returned error: 404 Issue #2667 nvm-sh/nvm GitHub

关于YOLO8学习(五)安卓部署ncnn模型--视频检测

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 简介 本文将会讲解: (1)使用前文生成的ncnn模型,部署到安卓端,并且实现视频中,人脸的检测…

FileBird Pro插件下载:革新您的WordPress媒体库管理

WordPress媒体库是您网站的重要组成部分,它存储了所有的图片、视频、文档等文件。但随着网站的扩展,媒体库的管理变得越来越复杂。FileBird Pro插件,作为一款专为WordPress用户设计的媒体库管理工具,以其直观的界面和强大的功能&a…

【PowerJob】从源码编译到k8s部署

前言 虽然PowerJob官方说支持JPA各种数据源,但在PG数据库的兼容性上,确实存在小问题,issue也有相关原理描述,官方采用的优雅方式并未真正解决问题,因为只解决了从Lob字段读取的时候,自动建表的时候还是会生…

去哪儿网机票服务请求头pre逆向

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除! url:aHR0cHM6Ly9tLmZsaWdodC5xdW5hci5jb20v 一、加密位…

噪声嵌入提升语言模型微调性能

在自然语言处理(NLP)的快速发展中,大模型(LLMs)的微调技术一直是研究的热点。最近,一篇名为《NEFTUNE: NOISY EMBEDDINGS IMPROVE INSTRUCTION FINETUNING》的论文提出了一种新颖的方法,通过在训…

网络基础-网络设备介绍

本系列文章主要介绍思科、华为、华三三大厂商的网络设备 网络设备 网络设备是指用于构建和管理计算机网络的各种硬件设备和设备组件。以下是常见的网络设备类型: 路由器(Router):用于连接不同网络并在它们之间转发数据包的设备…

Unity 编辑器工具 - 资源引用查找器

在Unity项目开发过程中,管理和维护资源之间的引用关系是至关重要的。当然我们项目也是需要这个功能 毕竟项目大了之后查找资源引用还是交给 资源引用查找器 比较好。 功能概述 资源引用查找器允许开发者选择一个目标资源,并在整个项目中查找引用了该资…