Redis的数据类型

目录

string 

1.编码方式

2.应用场景 

3.常用命令 

hash

1.编码方式

2.应用场景

3.常用命令 

list 

1.编码方式

2.应用场景 

3.常用命令 

set 

1.编码方式

2.应用场景

3.常用命令

zset 

1.编码方式

2.应用场景

3.常用命令

如何理解Redis的编码方式 

embstr 

raw

ziplist 

quicklist

inset

skiplist

string

1.编码方式

1.int

当value的值为数字时,系统会识别并自动设置编码方式为int。

注意:当存储的是小数时,存的是字符串类型,所以在计算过程中需要先转为小数,计算完成后再转为字符串存储。效率比较低下。

2.embstr

当value是长度小于等于44字节的字符串时采用

3.raw

当value是长度大于44字节的字符串时采用

2.应用场景 

1.缓存:可以将计算得到的结果或数据库查询结果存储在 Redis 中,以避免重复计算或查询。

2.计数器:因为value常常会使用到数字,所以可以当作计数器使用,通过 INCR、DECR 等命令,可以方便地对存储的数字进行递增或递减操作。

3.会话管理:用于存储用户会话信息,比如用户登录状态、用户配置信息等。通过将用户信息存储在string中,可以方便地进行读写操作。

3.常用命令 

set、get、keys、getrange、incr、decr、incrby、append、strlen、exists、del、mget、mset、incrbyfloat、expire、ttl。

hash

1.编码方式

1.ziplist

当键值对数量比较少,且键和值的大小都适中时,Redis 使用压缩列表进行编码。

2.hashtable

当键值对数量较多,或者键或值的大小较大时,Redis 使用哈希表进行编码。

3.ziplist 和 hashtable 的混合编码

键值对数量较多,但其中一部分键值对较小且可以使用压缩列表编码时,Redis 会使用混合编码。

2.应用场景

1.用户信息存储

用于存储用户信息,每个用户对应一个hash,其中的键值对可以包括用户名、密码、电子邮件地址等信息。

2.缓存对象:

用于缓存一些结构化的对象,例如网页内容、API 响应等。每个缓存对象对应一个hash,方便按需获取和更新对象的属性。

3.存储表单数据

用于存储表单提交的数据,例如用户填写的表单信息。每个表单对应一个hash,而hash中的键值对表示表单字段和对应的值。

3.常用命令 

hset、hget、hexists、hdel、hkeys、hvals、hgetall、hmget、hscan、hlen、hincrby、hincrfloat

list 

1.编码方式

1.ziplist

当list中的元素数量较少,且每个元素的大小适中时,Redis 会使用压缩列表进行编码。

2.linkedlist

当list中的元素数量较多,或者每个元素的大小较大时,Redis 会使用双向链表进行编码。

2.应用场景 

1.消息队列

可以用作简单的消息队列。生产者通过 LPUSH 命令将消息推送到列表的左侧,而消费者则通过 RPOP 或 BRPOP 命令从右侧弹出消息。这样可以实现轻量级的消息队列。

2.存储有序数据集

当需要按照顺序存储一系列数据时,也可以作为有序数据集的一种存储方式。

3.任务调度

用于实现简单的任务调度系统。通过 LPUSH 将任务添加到列表的左侧,并使用消费者从右侧获取并执行任务。

3.常用命令 

lpush、rpush、lpop、rpop、lrange、lindex、linsert、lrem、llen、brpop、blpop

set 

1.编码方式

1.intset

当元素都是整数,并且元素数量较少时,Redis 使用整数集合进行编码。

2.hashtable

当元素不是全部为整数,或者元素数量较多时,Redis 使用哈希表进行编码。

2.应用场景

1.标签系统

用于存储标签信息,例如文章的标签、商品的标签等。每个元素代表一个标签,set中的元素都是唯一的。

2.在线用户列表

用于存储当前在线的用户列表。当用户登录或退出时,可以通过set中的元素添加或移除用户,实现实时在线用户管理。

3.无序集合操作

用于对集合进行交集、并集、差集等操作。Redis 提供了丰富的集合操作命令,例如 SINTER、SUNION、SDIFF 等,便于处理集合之间的关系。

4.衡量用户量和用户规模

当同一个用户访问多次服务器,根据set进行去重,后台只显示该用户的一次访问记录

3.常用命令

sadd、smembers、sismember、spop、smove、srem、sinter、sunion、sinterstore、sunionstore、sdiff、sdiffstore

zset 

1.编码方式

1.ziplist

当有序集合中的元素数量较少且分数都可以用较小的空间表示时,Redis 使用压缩列表进行编码。

2.skiplist

当有序集合中的元素数量较多或者分数较大,无法有效利用压缩列表的优势时,Redis 使用跳跃表进行编码。

2.应用场景

1.排行榜

适用于实现排行榜功能,每个元素代表一个用户,分数表示用户的得分。通过有序集合可以方便地获取用户的排名、得分等信息。

2.最高分统计

适用于存储用户的游戏得分,通过有序集合可以按照得分排序,方便获取最高分的用户信息。

3.带权重的投票系统

用于存储投票信息,每个元素表示一个投票选项,分数表示投票数量。通过有序集合可以按照投票数量进行排序,方便获取得票最多的选项。

3.常用命令

zadd、zrem、zrange、zcard、zscore、zincrby、zinterstore、zunionstore、zrank、zpopmax、zpopmin、zrangebyscore

如何理解Redis的编码方式 

Redis设计多种编码方式是为了更好地适应不同的数据特征和使用场景,以优化性能和内存占用。不同的数据结构和数据特点可能适合不同的编码方式,因此提供多种选择可以更好地满足各种使用需求。以下是一些设计多种编码方式的原因:

  1. 灵活性和通用性:

    提供多种编码方式使得Redis能够适应广泛的应用场景。每种编码方式都有其优势,可以根据数据的特征和使用场景选择最合适的方式。
  2. 性能优化:

    不同的编码方式在不同的场景下可能有不同的性能表现。通过选择合适的编码方式,Redis可以在特定情况下提供更高效的操作。
  3. 内存占用:

    不同的编码方式对于相同数据集的内存占用可能有差异。一些编码方式能够更紧凑地存储数据,节省内存。通过选择适当的编码方式,Redis可以更好地管理内存。
  4. 数据结构的不同需求:

    不同的数据结构有不同的特性和需求,因此选择适当的编码方式可以更好地满足这些需求。例如,有序集合和集合可能选择不同的编码方式以优化排序和无序性。
  5. 节省存储空间:

    一些编码方式针对特定类型的数据集合能够提供更紧凑的存储形式,从而减少存储空间的占用。
  6. 易于扩展:

    多种编码方式使得Redis在未来的版本中能够更容易地引入新的编码方式,以适应新的需求和技术。

embstr 

1.使用定长表示形式,它将字符串的内容直接存储在字符串对象的结构中,而不需要额外的分配空间。

2.主要设计用于节省内存,特别是在字符串较短的情况下。通过避免额外的内存分配,可以降低内存消耗。

3.由于直接存储字符串内容,而不需要进行额外的内存访问,因此在访问字符串内容时具有更快的速度。

raw

1.对于raw编码的字符串,Redis 会使用动态内存分配来存储字符串内容,以适应不同长度的字符串。

2.适用于存储二进制数据,因为它不对字符串内容进行修改或假设字符编码。这使得它可以存储任意字节的数据。

3.字符串内容通过指针动态访问,相对于embstr编码可能稍慢。

ziplist 

1.主要设计用于节省内存。它采用紧凑的存储形式,通过使用变长的节点(entry)来存储元素,以便在内存占用上更加高效。

quicklist

1.每个quicklist节点中是一个ziplist,用于存储一部分列表元素。

2.支持双向遍历,使得在列表两端进行快速的遍历操作成为可能。

inset

1.采用有序数组的形式存储元素,这使得在整数集合中进行快速的二分查找成为可能,提高了查找效率。

2.设计目标是紧凑存储整数元素,以减少内存占用。它采用了特定的编码方式,使得每个元素的存储空间尽可能小。

skiplist

1.它的多层结构使得在搜索和插入操作中可以进行跳跃式的操作,而不必每次都从头遍历整个链表。这提高了搜索和插入的效率。

2.由于元素是有序的,因此支持范围查询非常高效。通过在多层链表中跳跃,可以快速定位到指定范围的元素

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

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

相关文章

2024三掌柜赠书活动第七期:一本书读懂AIGC:探索AI商业化新时代

目录 前言AI商业化的背景和挑战关于《一本书读懂AIGC:探索AI商业化新时代》编辑推荐内容简介作者简介图书目录书中前言/序言《一本书读懂AIGC:探索AI商业化新时代》全书速览结束语 前言 不用多讲,想必大家也都知道,人工智能在过…

k8s-基础知识(Service,NodePort,CusterIP,无头服务,NameSpace,资源限制)

Node Node 是 Pod 真正运行的主机,可以是物理机,也可以是虚拟机。 Annotations 原文链接 Annotations 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象,Annotations 则是用来记录一些附加信息,用来辅助应…

【标定】多源LiDAR传感器标定方法(含C++代码)

提供的代码是一种使用平面提取和匹配以及随后的Ceres Solver库优化转换的LiDAR标定方法的全面实现。这种方法用于对齐多个LiDAR传感器的数据,比如那些安装在车辆或机器人不同位置的传感器,以确保它们生成的点云在同一坐标系统中。 以下是对代码及其实现的标定方法的介绍: 利…

linux虚拟化之kvm(一个200行的arm64虚拟机代码)

一、背景 之前介绍了X86上的一个简易虚拟机: linux虚拟化之kvm(一个150行的x86虚拟机代码)-CSDN博客 ,但作为一名嵌入式开发者,还是需要在ARM64上尝试一番,ARM64上的虚拟化和X86还是有很多差异点&#x…

nosql数据库知识点总结

目录 1、什么是nosql数据库,它包括哪些 文档数据库 建数据 哪一种是最简单的 2、什么是文档数据库 3、创建mongodb时默认会建造三个数据库,是哪三个 4、mongodb支持的数据类型有哪些 5、它的常规语句有哪些 6、副本集和分片集有什么作用 复制 …

​​力扣刷MySQL-第九弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…

Spring 事务原理二

该说些什么呢?一连几天,我都沉溺在孤芳自赏的思维中无法自拔。不知道自己为什么会有这种令人不齿的表现,更不知道这颗定时炸弹何时会将人炸的粉身碎骨。好在儒派宗师曾老夫子“吾日三省吾身”的名言警醒了我。遂潜心自省,溯源头以…

20240128-读书带来的影响

我本身不算是一个特别喜欢读书的人,更多的时候其实是为了读书而读书。在坚持每天读了一小时书之后,我发现自身开始慢慢有些变化。是什么时候突然有了这种感悟呢,是最近每周5小时左右的微信读书以及纸质书籍的阅读,让我体会到了读书…

C++爱好者的科目四易错点总结

科目四易错点总结 在科目四考试中,一部分内容是可以通过刷题快速掌握的,一部分内容缺因易混淆而降低我们的准确率,本文主要对后者进行总结,期待大家补充与指正。 注: 本文不是全部的知识点总结处 本文不是权威机构 本文…

【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)

基于Netty的分布式通信框架实现 前提介绍回顾Dubbo分布式通信框架组成元素程序执行流程消息协议设计实现机制ChannelInboundHandlerAdapter自定义事件处理 ChannelOutboundHandlerAdapter 编(解)码处理器编码过程阶段ChannelOutboundHandlerAdapter序列化实现ChannelOutboundHa…

NLP自然语言处理的发展:从初创到人工智能的里程碑

自然语言处理(Natural Language Processing,NLP)人工智能领域中备受关注的重要分支之一。它使得计算机能够理解、解释和使用人类语言。随着技术的不断发展,NLP经历了从初创时期到深度学习时代的巨大演变,推动了互联网产…

【教学类-XX -XX 】20240128名字字卡1.0(15CM正方形手工纸、黑体,说明是某个孩子的第几个名字)

作品展示: 15CM手工纸上一个名字,页眉有这个字是哪一位孩子的第X个名字的说明 背景需求: 去年我制作了中6班孩子的姓名卡片,一张A4纸上6个字,每张卡片大约10CM) 【教学类-25-01】20230320 名字卡片绘画游…

使用机器学习算法检测交易中的异常行为

交易中的异常检测意味着识别交易或相关活动中的异常或意外模式。这些模式被称为异常或异常值,明显偏离预期规范,可能表明存在不规则或欺诈行为。 异常检测在各种业务中发挥着至关重要的作用,尤其是那些涉及金融交易、在线活动和安全敏感操作…

IMX6ULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

参考:【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分)-CSDN博客 韦东山课程:LED模板驱动程序的改造_总线设备驱动模型 我使用的开发板:野火imx6ull pro 欢迎大家一起讨论学习 实现了总线设…

ChatGPT与文心一言:智能回复与语言准确性的较量

在当今数字化时代,随着人们对智能化技术的需求不断增长,智能回复工具也成为了日常生活中不可或缺的一部分。ChatGPT和文心一言作为两个备受瞩目的智能回复工具,在智能回复、语言准确性以及知识库丰富度等方面各有卓越之处。 本文将对这两者进…

JAVA编程语言单词汇总

Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Ora…

算法每日一题: 边权重均等查询 | 公共子祖先

大家好,我是星恒,今天给大家带来的是一道图里面有关公共子祖先的题目,理解起来简单,大家 题目:leetcode 2846 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n …

【Linux C | 网络编程】详细介绍 “三次握手(建立连接)、四次挥手(终止连接)、TCP状态”

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

强化合作!浪潮信息携手业界伙伴筑牢算力底座

以太平金融科技服务(上海)有限公司(以下简称“太平金科”)为例,在算力新型基础设施建设方面,该公司一直不遗余力。近日,该公司更携手全球领先的IT基础设施供应商浪潮信息,优化算力基…

静态代理IP该如何助力Facebook多账号注册运营?

在Facebook运营中,充分利用静态代理IP是多账号运营的关键一环。通过合理运用静态代理IP,不仅可以提高账号安全性,还能有效应对Facebook的算法和限制。以下是这些关键点,可以帮助你了解如何运用静态代理IP进行Facebook多账号运营&a…