百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Redis 数据类型和命令大全

wptr33 2025-01-05 20:32 30 浏览

Redis 是一种速度非常快的非关系型数据库解决方案。其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性。Redis 允许您使用各种数据类型(例如列表、哈希、集合和排序集合)来存储和管理数据。

在本教程中,了解Redis 数据类型的工作原理并掌握每种数据类型的基本命令

Redis 数据类型

键值数据库通过一个唯一的键对应数据对象的数据。使用该键来管理和检索分配给该特定键的值。任何大小不超过 512 MB 的二进制序列都可以用作 Redis 键,然后与简单的字符串或其他抽象数据结构相关联。

Redis 键通过使用七种不同数据类型之一映射到值:

  • 字符串
  • 列表
  • 哈希值
  • 集合
  • 排序集合
  • 基数统计
  • 位图 (BitStrings)

字符串

字符串表示可以附加到键的最小值。字符串值的最大允许大小为 512 MB,包含任何字符序列。在Redis中,键值对的键部分也是一个字符串。

使用这种数据结构的数据库通常被称为字符串到字符串键值存储。

由于所有数据都在一个对象中,Redis 中的字符串操作非常快。基本的 Redis 命令,如SETGETDEL允许您对字符串值执行基本操作。

  • SET key value – 设置指定键的值。
  • GET key – 检索指定键的值。
  • DEL key – 删除给定键的值。

以下示例说明了如何在redis-cli交互式 shell 中使用这些简单的命令。该SET命令将值添加到键,同时该GET命令获取并显示该值。如果没有值映射到键,则GET命令的输出为(nil)

如果存在某个值,则该DEL命令的输出将显示要删除的项目数。添加新的键和值不会影响数据库性能或处理速度。

用例:字符串主要用于缓存 HTML 元素、小部件,甚至整个网页。会话和用户特定数据存储在内存中,以加快和增强网站浏览体验。Redis 字符串还可以促进资源分配,作为对消息传递或流量平衡应用程序的补充。

列表

Redis 允许您将有序的字符串序列与键相关联。这个字符串链表允许您执行一组操作,例如:

  • LPUSH – 将值推送到列表的左端。
  • RPUSH – 将值推送到列表的尾端。
  • LRANGE – 检索一系列项目。
  • LPOP/RPOP – 用于显示和移除两端的项目。
  • LINDEX – 从列表中的特定位置获取值。

使用LPUSH/RPUSH命令向列表添加值时,输出提供当前项目数。然后,您可以使用以下LRANGE命令获取整个列表,以0作为开始并-1表示最后一个索引项。

使用LINDEX命令从链接列表中检索特定值或使用命令删除项目LPOP/RPOP

向链表添加值是一种有效的操作,无论其大小如何都不会影响写入速度。但是,从链表中读取数据可能取决于键值对值侧的字符串数量。

用例:链表提供的可能性使其成为存储实时数据更新例,如社交媒体帖子或日志的理想数据类型。

哈希值

Redis 哈希存储键值对的无序映射。散列键与值相关联。该值是一个包含其他键值对的 Redis 字符串。您不能使用其他复杂的数据结构,例如 Sets、Lists 或其他 Hashes 作为值。

基本哈希命令允许您独立访问和更改单个或多个字段。

  • HSET – 将值映射到散列中的键。
  • HGET – 检索与散列中的键关联的单个值。
  • HGETALL – 显示整个哈希内容。
  • HDEL – 从散列中删除现有的键值对。

每次使用HSET命令将项目添加到散列时,返回值会(integer) n通知您条目是否已存在以及实例数。使用该HDEL命令时会提供相同的信息。

用例:哈希可以非常有效地存储数百万甚至数十亿个对象。可用字段的数量使得哈希对于维护大量单个对象,例如用户数据非常有用。

集合

Redis 集是唯一字符串的无序集合。由于集合没有排序,您不能像列表一样从索引的前端或末尾删除项目。但是,字符串是唯一的,并且同一项目的多个实例不可能出现在一个集合中。

使用以下命令添加、删除、检索和检查集合中的单个项目:

  • SADD – 将一个或多个项目添加到一个集合中。
  • SISMEMBER – 找出一个项目是否是一个集合的一部分。
  • SMEMBERS – 从集合中检索所有项目。
  • SREM – 从集合中删除现有项目。

将同一项目多次添加到一个集合中总是会产生一个副本。因此,您不需要使用SMEMBERSorSISMEMBER命令来确定项目是否已经是集合的成员。

使用该SADD命令确保集合中没有重复的条目。

用例: Redis 集非常适合跟踪独一无二的事件,例如独特的页面浏览量或单个 IP。集合还支持高级操作,例如并集、交集和差操作。

排序集合

排序集或ZSET是 Redis 中最高级的数据类型之一。

排序集键值对的值部分由称为成员的唯一字符串元素(键)和称为分数的项目(值)组成。排序集将每个元素映射到一个浮点值 ( score ) 并使用该值以特定顺序对元素进行排序。

您可以按成员、排序顺序和分数值访问排序集中的项目。基本命令允许您根据成员值和分数范围获取、添加、删除单个值或检索项目。

  • ZADD – 将具有分数的成员添加到排序集中。
  • ZRANGE – 根据项目在排序顺序中的位置检索项目。该withscores 选项产生实际的分数值。
  • ZRANGEBYSCORE– 根据定义的分数范围从排序集中获取项目。该withscores 选项产生实际的分数值。
  • ZREM从排序集中删除项目。

只有成员分数对的成员值被视为唯一的。如果您将两个不同的分数与同一个成员值相关联,则排序集中只会出现最新添加的分数。如果两个不同的成员具有相同的分数, Redis 会按字母数字顺序对值进行排序。

用例:单个排序集可以使用ZRANGEZREVRANGERedis 命令跟踪并提供在线比赛中玩家分数的有序排行榜。

基数统计

HyperLogLogs 提供集合中唯一项目的估计计数。与其他解决方案相反,HyperLogLogs 中的项目不会被单独计算,因为这需要跟踪之前的项目以避免对相同元素进行两次计数。此类操作需要的内存量等于用于存储数据的内存量。

HyperLogLog 结构使用更有效的概率算法来估计集合的大小,而不是计算每个项目。估计的错误率低于 1%。

HyperLogLog 命令允许您添加项目、检索唯一项目的估计计数以及创建多个 HyperLogLog 的联合。

  • PFADD – 向 HyperLogLog 添加一个或多个元素。
  • PFCOUNT – 从单个 HyperLogLog 中获取估计的唯一项目数。
  • PFMERGE – 将不同的 HyperLogLog 合并为一个 HyperLogLog。

结果的准确性可能因集合的大小而异。但是,如果您不需要精确的项目计数,则此概率结构允许您仅使用原本需要的内存的一小部分。

用例:使用 HyperLogLogs 来聚合和计算唯一的用户交互或查询。

位图

Redis 字符串是一个二进制序列,最大大小为 512 兆字节。位图允许您使用适当的命令在位级别上操作字符串。

  • SETBIT – 基于 0 或 1 值定义或清除该位。
  • GETBIT – 检索由键指定的字符串值的位值。
  • BITOP – 在字符串之间执行按位运算。
  • BITPOS – 找到字符串中设置为 1 或 0 的第一位。
  • BITCOUNT – 计算字符串中设置为 1 的位数。

能够操作字符串的位提供了特殊的节省空间的机会。它还提供了一种直接访问和处理数据基本元素的方法。

用例:对位进行操作简化了实时分析、人口计数器和跟踪用户活动。位图经常用于存储可以表示为连续键之间的布尔值是/否分隔的数据。

全面了解 Redis 数据类型以及与每个数据结构相关的基本命令。为在应用程序中设计合适的存储解决方案提供了灵活性。

喜欢的朋友记得给关注~

相关推荐

oracle数据导入导出_oracle数据导入导出工具

关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...

继续学习Python中的while true/break语句

上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个else解...

python continue和break的区别_python中break语句和continue语句的区别

python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...

简单学Python——关键字6——break和continue

Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...

2-1,0基础学Python之 break退出循环、 continue继续循环 多重循

用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...

Python 中 break 和 continue 傻傻分不清

大家好啊,我是大田。今天分享一下break和continue在代码中的执行效果是什么,进一步区分出二者的区别。一、continue例1:当小明3岁时不打印年龄,其余年龄正常循环打印。可以看...

python中的流程控制语句:continue、break 和 return使用方法

Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...

L017:continue和break - 教程文案

continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...

作为前端开发者,你都经历过怎样的面试?

已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...

面试被问 const 是否不可变?这样回答才显功底

作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...

2023金九银十必看前端面试题!2w字精品!

导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。答案:CSS的盒模型是用于布局和定位元素的概念。它由内容区域...

前端面试总结_前端面试题整理

记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...

由浅入深,66条JavaScript面试知识点(七)

作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录由浅入深,66条JavaScript面试知识点(一)由浅入深,66...

2024前端面试真题之—VUE篇_前端面试题vue2020及答案

添加图片注释,不超过140字(可选)1.vue的生命周期有哪些及每个生命周期做了什么?beforeCreate是newVue()之后触发的第一个钩子,在当前阶段data、methods、com...

今年最常见的前端面试题,你会做几道?

在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...