【redis】五种数据类型和编码方式
文章目录
- 五种数据类型
- 编码方式
- string
- hash
- list
- set
- zset
- 查询内部编码
五种数据类型

- 字符串:
Java中的String - 哈希:
Java中的HashMap - 列表:
Java中的List - 集合:
Java中的Set - 有序集合:除了存
member之外,还有权重score(权重、分数)
Redis 底层在实现上述数据结构的时候,会在源码层面,针对上述实现进行特定优化,来达到节省时间/节省空间的效果
- 内部具体实现的数据结构还会有变化
Redis向你承诺,现在我有个 hash 表,你进行查询、插入、删除操作,都保证时间复杂度是 O ( 1 ) O(1) O(1)- 但是,这个背后的实现,不一定就是一个标准的
hash表,可能在特定的场景下,使用别的数据结构实现,但是仍然保证时间复杂度符合承诺
编码方式
- 数据结构:Redis 承诺给你的,也可以理解成数据类型
- 编码方式:Redis 内部底层的实现
同一个数据类型,背后可能的编码实现方式是不同的,会根据特定场景优化
string
string:Redis会自动适应,程序员在使用Redis的时候一般感知不到raw:最基本的字符串。底层就是持有byte数组int:Redis通常也可以用来实现“计数”这样的功能(帖子的点赞数,评论数…)。当value就是一个整数的时候,此时可能Redis直接使用int来保存embstr:针对短字符串进行的特殊优化
hash
hashhashtable:最基本的哈希表(这里是Redis内部的哈希表的实现,和Java标准库中的HashTable不一样)ziplist:压缩列表,针对一些特殊的场景下,将数据进一步压缩,从而减少空间(在哈希表里面的元素较少的时候,可能就优化成ziplist了)
[!quote] 为什么要压缩?为什么是元素少的时候才压缩?
Redis上有很多key,可能某些key的value是hash。此时,如果key特别多,对应的hash也特别多,但是每个hash又不大的情况下,就尽量去压缩,压缩之后就可以让整体占用的内存更小了- 压缩是一种优化措施,但在大量数据的情况下,压缩和解压会增加额外的计算开销。元素较多时,
Redis通常会自动将存储方式从ziplist转为hashtable等更高效的存储方式,以避免在大量数据操作时发生性能瓶颈。
list
listlinkedlist:链表:非常方便从中间位置查找删除ziplist:压缩列表(和hash里面的一样)
- 从
Redis 3.2开始,引入了新的实现方式:quicklist。其同时兼顾了linkedlist和ziplist的优点。quicklist就是一个链表,每个元素又是一个ziplist
set
sethashtableintset:集合中存的都是整数,就会被优化成intset
zset
zsetskiplist:跳表,其也是链表,只是不同于普通的链表。每个节点上有多个指针域,巧妙地搭配这些指针域的指向,就可以做到从跳表上查询元素的复杂度是 O ( l o g N ) O(logN) O(logN)(类似于平衡二叉搜索树(如 AVL 树、红黑树))ziplist:
查询内部编码
语法:
object encoding

Redis 会自动根据当前的事迹情况选择内部的编码方式,自动适应。那我们是否要记住,什么时候使用什么编码方式呢?
- 只记思想,不记数字!
网上的说法:如果字符串长度小于 39 字节,使用
embstr,超过 39 字节,使用raw
- 记数字,没有任何意义
- 数字都是可配置的
- 数字是怎么来的?需要考证清楚
- 相比于知道数字,更重要的是知道数字是怎么得到的,就可以根据所处的实际场景,重新得到这样的数字
相关文章:
【redis】五种数据类型和编码方式
文章目录 五种数据类型编码方式stringhashlistsetzset查询内部编码 五种数据类型 字符串:Java 中的 String哈希:Java 中的 HashMap列表:Java 中的 List集合:Java 中的 Set有序集合:除了存 member 之外,还有…...
今日头条文章爬虫教程
今日头条文章爬虫教程 随着互联网的发展,新闻资讯类平台如今日头条积累了海量的数据。对于数据分析师、研究人员等群体来说,获取这些数据进行分析和研究具有重要的价值。本文将介绍如何使用Python编写爬虫,爬取今日头条的文章数据。 一、准…...
使用Modelsim手动仿真
FPGA设计流程 在设计输入之后,设计综合前进行 RTL 级仿真,称为综合前仿真,也称为前仿真或 功能仿真。前仿真也就是纯粹的功能仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟。在完成一个设计的代码编写工作之后,可以直接对代码进行仿真,…...
从Manus看网络安全:通用AI智能体重构安全运营
当通用AI智能体遇见网络安全 开启主动防御的跃迁 在勒索软件平均潜伏期缩短至3.7天、APT攻击复杂度指数级攀升的当下,传统SOAR产品(安全编排、自动化和响应)正面临两大困境: 规则依赖症:基于Playbook的响应逻辑&…...
南开提出1Prompt1Story,无需训练,可通过单个连接提示实现一致的文本到图像生成。
(1Prompt1Story)是一种无训练的文本到图像生成方法,通过整合多个提示为一个长句子,并结合奇异值重加权(SVR)和身份保持交叉注意力(IPCA)技术,解决了生成图像中身份不一致…...
hooks useModule自定义hooks (二次封装AgGridReact ag-table)自定义表头,自定义表头搜索
场景业务: 多次运用AgGridReact的table 列表 思路: 运用自定义hooks进行二次封装: 通用配置例如:传参的参数,传参的url,需要缓存的key这些键值类 定制化配置例如:需要对table 的一些定制化传…...
Manus无需邀请码即可使用的平替方案-OpenManus实测
文章目录 Manus 简介核心定位技术架构核心特点应用场景性能表现用户体验发展计划OpenManus技术架构与设计理念核心功能特性应用场景案例与闭源Manus的差异对比安装使用与实战演示执行过程记录简单案例-快速写一个helloworld的java程序复杂案例-分析特斯拉汽车近三年财务数据并生…...
常用的gpt
1、DeepSeek 好用。可惜现在热度上去了,经常查技术问题会报网络繁忙 2、Qwen Chat Qwen Chat 千问,阿里的gpt。需要注册账号,好用程度感觉跟deepSeek差不多。并且不会像deepSeek一样报网络繁忙 3、文心一样 百度的。相对上2个技术问题较弱…...
【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑
前言 由于deepseek网页端在白天日常抽风,无法正常的使用,所以调用API就成了目前最好的选择,尤其是Deepseek的API价格低得可怕,这不是和白送的一样吗!然后使用过很多本地部署接入API的方式,例如Chatbox、Pa…...
MAX232数据手册:搭建电平转换桥梁,助力串口稳定通信
在现代电子设备的通信领域,串口通信因其简单可靠而被广泛应用。MAX232 芯片作为串口通信中的关键角色,发挥着不可或缺的作用。下面,我们将依据提供的资料,深入解读 MAX232 芯片的各项特性、参数以及应用要点。 一、引脚说明 MAX2…...
vue2项目开启br压缩
<在 Vue 2 项目中,使用 br 压缩通常是为了减少文件大小,从而加快网页加载速度。br 是一种由 Google 开发的压缩格式,全称为 Brotli。在 Vue 2 项目中,你可以通过配置构建工具(如 Webpack)来启用对 .br 文…...
jdk-21_linux-x64_bin.tar.gz Linux jdk21压缩包安装保姆级(详细安装教程)
jdk-21_linux-x64_bin.tar.gz 解压版详细安装教程 一、简洁版(需要对 Linux 操作有一定基础)二、图文详细教程1、前置准备2、解压安装3、配置环境变量4、验证成功 官网下载地址: https://www.oracle.com/java/technologies/downloads/#java2…...
DataWhale-三月学习任务-大语言模型初探(一、二、五章学习)
本次学习计划,参考赵鑫老师团队出版的大语言模型一书,链接如下: 书籍及参考资料链接 第一章节 从技术路径上来说,语言模型(LanguageModel, LM)是提升机器语言智能(Language Intelligence&…...
【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?
概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。…...
Nuxt.js 全栈开发指南:构建现代 Web 应用的终极解决方案
一、Nuxt.js 的核心价值与演进 1.1 现代 Web 开发的挑战与破局 根据 2023 年 Web Almanac 统计,全球 Top 1000 网站中有 68% 采用服务端渲染方案。Nuxt.js 作为 Vue 生态的 SSR 框架,完美解决了以下痛点: SEO 困境:传统 SPA 的…...
PPT内视频播放无法播放的原因及解决办法
PPT内视频无法播放,通常是视频编解码的问题。目前我遇到的常见的视频编码格式有H.264,H.265,VP9,AV1这4种。H.264编解码的视频,Windows原生系统可以直接播放,其他的视频编码格式需要安装对应的视频编解码插…...
关于ModbusTCP/RTU协议转Ethernet/IP(CIP)协议的方案
IGT-DSER智能网关模块支持西门子、倍福(BECKHOFF)、罗克韦尔AB,以及三菱、欧姆龙等各种品牌的PLC之间通讯,支持Ethernet/IP(CIP)、Profinet(S7),以及FINS、MC等工业自动化常用协议,同时也支持PLC与Modbus协议的工业机器人、智能仪…...
为什么要开源?
互联网各领域资料分享专区(不定期更新): Sheet 正文 开源(Open Source)是软件、硬件或知识产品将其源代码或设计公开,允许任何人自由使用、修改和分发的模式。开源的核心不仅是“免费”,更是一种协作和透明的理念。以下是开源的主要动因和优势: 一、技术驱动:提升质量…...
WPF在特定领域的应用:打造一款专业的图像编辑工具
WPF在特定领域的应用:打造一款专业的图像编辑工具 一、前言二、WPF 基础概念2.1 什么是 WPF2.2 WPF 的核心特性 三、图像编辑工具的需求分析3.1 基本功能3.2 高级功能 四、使用 WPF 实现图像编辑工具4.1 项目搭建4.2 图像加载与显示4.3 基本编辑操作4.4 图层管理4.5…...
从0开始的操作系统手搓教程43——实现一个简单的shell
目录 添加 read 系统调用,获取键盘输入 :sys_read putchar和clear 上班:实现一个简单的shell 测试上电 我们下面来实现一个简单的shell 添加 read 系统调用,获取键盘输入 :sys_read /* Read count bytes from the file pointed to by fi…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
