当前位置: 首页 > news >正文

【redis】五种数据类型和编码方式

文章目录

  • 五种数据类型
  • 编码方式
    • string
    • hash
    • list
    • set
    • zset
    • 查询内部编码

五种数据类型

image.png

  • 字符串:Java 中的 String
  • 哈希:Java 中的 HashMap
  • 列表:Java 中的 List
  • 集合:Java 中的 Set
  • 有序集合:除了存 member 之外,还有权重 score(权重、分数)

Redis 底层在实现上述数据结构的时候,会在源码层面,针对上述实现进行特定优化,来达到节省时间/节省空间的效果

  • 内部具体实现的数据结构还会有变化
  • Redis 向你承诺,现在我有个 hash 表,你进行查询、插入、删除操作,都保证时间复杂度是 O ( 1 ) O(1) O(1)
  • 但是,这个背后的实现,不一定就是一个标准的 hash 表,可能在特定的场景下,使用别的数据结构实现,但是仍然保证时间复杂度符合承诺

编码方式

  • 数据结构:Redis 承诺给你的,也可以理解成数据类型
  • 编码方式:Redis 内部底层的实现
    同一个数据类型,背后可能的编码实现方式是不同的,会根据特定场景优化

string

  • stringRedis 会自动适应,程序员在使用 Redis 的时候一般感知不到
    • raw:最基本的字符串。底层就是持有 byte 数组
    • intRedis 通常也可以用来实现“计数”这样的功能(帖子的点赞数,评论数…)。当 value 就是一个整数的时候,此时可能 Redis 直接使用 int 来保存
    • embstr:针对短字符串进行的特殊优化

hash

  • hash
    • hashtable:最基本的哈希表(这里是 Redis 内部的哈希表的实现,和 Java 标准库中的 HashTable 不一样)
    • ziplist:压缩列表,针对一些特殊的场景下,将数据进一步压缩,从而减少空间(在哈希表里面的元素较少的时候,可能就优化成 ziplist 了)

[!quote] 为什么要压缩?为什么是元素少的时候才压缩?

  • Redis 上有很多 key,可能某些 keyvaluehash。此时,如果 key 特别多,对应的 hash 也特别多,但是每个 hash 又不大的情况下,就尽量去压缩,压缩之后就可以让整体占用的内存更小了
  • 压缩是一种优化措施,但在大量数据的情况下,压缩和解压会增加额外的计算开销。元素较多时,Redis 通常会自动将存储方式从 ziplist 转为 hashtable 等更高效的存储方式,以避免在大量数据操作时发生性能瓶颈。

list

  • list
    • linkedlist:链表:非常方便从中间位置查找删除
    • ziplist:压缩列表(和 hash 里面的一样)
  • Redis 3.2 开始,引入了新的实现方式:quicklist。其同时兼顾了 linkedlistziplist 的优点。
  • quicklist 就是一个链表,每个元素又是一个 ziplist

set

  • set
    • hashtable
    • intset:集合中存的都是整数,就会被优化成 intset

zset

  • zset
    • skiplist跳表,其也是链表,只是不同于普通的链表。每个节点上有多个指针域,巧妙地搭配这些指针域的指向,就可以做到从跳表上查询元素的复杂度是 O ( l o g N ) O(logN) O(logN)(类似于平衡二叉搜索树(如 AVL 树、红黑树))
    • ziplist

查询内部编码

语法:

object encoding 

image.png|348

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 项目中&#xff0c;使用 br 压缩通常是为了减少文件大小&#xff0c;从而加快网页加载速度。br 是一种由 Google 开发的压缩格式&#xff0c;全称为 Brotli。在 Vue 2 项目中&#xff0c;你可以通过配置构建工具&#xff08;如 Webpack&#xff09;来启用对 .br 文…...

jdk-21_linux-x64_bin.tar.gz Linux jdk21压缩包安装保姆级(详细安装教程)

jdk-21_linux-x64_bin.tar.gz 解压版详细安装教程 一、简洁版&#xff08;需要对 Linux 操作有一定基础&#xff09;二、图文详细教程1、前置准备2、解压安装3、配置环境变量4、验证成功 官网下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/#java2…...

DataWhale-三月学习任务-大语言模型初探(一、二、五章学习)

本次学习计划&#xff0c;参考赵鑫老师团队出版的大语言模型一书&#xff0c;链接如下&#xff1a; 书籍及参考资料链接 第一章节 从技术路径上来说&#xff0c;语言模型&#xff08;LanguageModel, LM&#xff09;是提升机器语言智能&#xff08;Language Intelligence&…...

【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?

概述 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于&#xff1a;某个对象的构建过程复杂的情况。 由于实现了构建和装配的解耦。…...

Nuxt.js 全栈开发指南:构建现代 Web 应用的终极解决方案

一、Nuxt.js 的核心价值与演进 1.1 现代 Web 开发的挑战与破局 根据 2023 年 Web Almanac 统计&#xff0c;全球 Top 1000 网站中有 68% 采用服务端渲染方案。Nuxt.js 作为 Vue 生态的 SSR 框架&#xff0c;完美解决了以下痛点&#xff1a; SEO 困境&#xff1a;传统 SPA 的…...

PPT内视频播放无法播放的原因及解决办法

PPT内视频无法播放&#xff0c;通常是视频编解码的问题。目前我遇到的常见的视频编码格式有H.264&#xff0c;H.265&#xff0c;VP9&#xff0c;AV1这4种。H.264编解码的视频&#xff0c;Windows原生系统可以直接播放&#xff0c;其他的视频编码格式需要安装对应的视频编解码插…...

关于ModbusTCP/RTU协议转Ethernet/IP(CIP)协议的方案

IGT-DSER智能网关模块支持西门子、倍福(BECKHOFF)、罗克韦尔AB&#xff0c;以及三菱、欧姆龙等各种品牌的PLC之间通讯&#xff0c;支持Ethernet/IP(CIP)、Profinet(S7)&#xff0c;以及FINS、MC等工业自动化常用协议&#xff0c;同时也支持PLC与Modbus协议的工业机器人、智能仪…...

为什么要开源?

互联网各领域资料分享专区(不定期更新): Sheet 正文 开源(Open Source)是软件、硬件或知识产品将其源代码或设计公开,允许任何人自由使用、修改和分发的模式。开源的核心不仅是“免费”,更是一种协作和透明的理念。以下是开源的主要动因和优势: 一、技术驱动:提升质量…...

WPF在特定领域的应用:打造一款专业的图像编辑工具

WPF在特定领域的应用&#xff1a;打造一款专业的图像编辑工具 一、前言二、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 系统调用&#xff0c;获取键盘输入 :sys_read putchar和clear 上班&#xff1a;实现一个简单的shell 测试上电 我们下面来实现一个简单的shell 添加 read 系统调用&#xff0c;获取键盘输入 :sys_read /* Read count bytes from the file pointed to by fi…...

技术创始人如何选择CEO:谦逊、互补与权力交接的艺术

1. 从技术专家到掌舵者&#xff1a;CEO角色转变的深层逻辑 在EDA&#xff08;电子设计自动化&#xff09;和半导体设计这个高度技术驱动的领域里&#xff0c;创业公司的故事每天都在上演。你可能会在DAC&#xff08;设计自动化大会&#xff09;上看到上百家初创公司&#xff0c…...

Codex:不只是程序员的代码助手,更是办公人士的高效伙伴

Codex&#xff1a;不只是程序员的代码助手&#xff0c;更是办公人士的高效伙伴 面向团队协作、文档处理、数据分析和日常执行的智能工作台 当人们谈到 Codex&#xff0c;第一反应往往是“写代码”。这当然是它的强项&#xff0c;但如果只把 Codex 看成程序员的专属工具&#…...

人文艺术体系清单——衣冠服饰体系

一、历朝服饰考据清单&#xff08;主流汉地服饰&#xff09;考据要求&#xff1a;完整复原形制、剪裁结构、面料制式、色彩规范、时代特征、人文气运、上古图腾溯源&#xff0c;对齐本体系地脉气运、人文文气、先天图腾大道逻辑。上古时期&#xff1a;玄鸟衣冠、上古祭服、原始…...

主动悬架乘坐舒适性控制策略优化【附模型】

✨ 长期致力于随机路面、主动悬架、乘坐舒适性、控制策略、仿真分析研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;随机路面与1/4悬架动力学建模&…...

用OpenCV搭建可落地的图像数据采集系统

1. 项目概述&#xff1a;用 OpenCV 搭建轻量级图像采集工作站&#xff0c;不是写个 demo 而是建一套能落地的数据生产线你有没有遇到过这种场景&#xff1a;刚立项一个手势识别项目&#xff0c;团队兴奋地讨论模型结构、损失函数、训练策略&#xff0c;结果一问“数据呢&#x…...

5分钟快速上手:用FanControl打造你的Windows电脑静音散热系统

5分钟快速上手&#xff1a;用FanControl打造你的Windows电脑静音散热系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...

Arm嵌入式多线程编程:原理、实践与优化

1. Arm嵌入式开发中的多线程编程基础在嵌入式系统开发中&#xff0c;多线程编程是提高系统响应能力和资源利用率的重要手段。Arm架构作为嵌入式领域的主流处理器架构&#xff0c;其编译器工具链对多线程编程提供了完善的支持。不同于通用计算环境&#xff0c;嵌入式系统的多线程…...

智能体架构实战:从LangGraph状态机到多智能体协作

1. 从理论到实践&#xff1a;为什么我们需要一个“智能体架构大全”项目如果你在过去一年里关注过AI领域&#xff0c;尤其是大语言模型的应用开发&#xff0c;那么“智能体”这个词一定已经听得耳朵起茧了。从能帮你写代码的Devin&#xff0c;到能自主完成复杂任务的GPT-4o&…...

LSLib:让《神界原罪》和《博德之门3》MOD制作变得高效完整的实用指南

LSLib&#xff1a;让《神界原罪》和《博德之门3》MOD制作变得高效完整的实用指南 【免费下载链接】lslib Tools for manipulating Divinity Original Sin and Baldurs Gate 3 files 项目地址: https://gitcode.com/gh_mirrors/ls/lslib 你是否曾想为《神界原罪》或《博德…...

当三维基因组“打结”:从罕见病到癌症,那些被折叠改变的生命密码

当三维基因组“打结”&#xff1a;从罕见病到癌症&#xff0c;那些被折叠改变的生命密码 想象一下&#xff0c;如果把人类基因组比作一条长达两米的毛线&#xff0c;它需要被精巧地折叠进直径仅几微米的细胞核中。这种看似不可能的折叠并非随机——它遵循着严格的拓扑规则&…...