Redis数据类型与命令用法:综合指南

2021年11月20日18:35:43 发表评论 550 次浏览

Redis数据类型与命令用法介绍

Redis 是一种速度非常快的非关系型数据库解决方案。其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性。

Redis如何使用数据类型与命令?Redis 允许你使用各种数据类型(例如列表、哈希、集合和排序集合)来存储和管理数据。

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

Redis 数据类型

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

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

  • 字符串
  • 列表
  • 哈希值
  • 排序集
  • 超级日志日志
  • 位图 (BitStrings)

如果你没有安装 Redis,请使用我们的详细指南在 Ubuntu 上安装 Redis或在 Docker上部署 Redis。

字符串

Redis如何使用数据类型与命令?字符串表示可以附加到键的最小值。字符串值的最大允许大小为 512 MB,包含任何字符序列。在Redis中,键值对的键部分也是一个字符串。

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

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

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

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

Redis数据类型与命令用法:综合指南

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

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

Redis数据类型与命令用法:列表

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

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

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

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

Redis数据类型与命令用法:综合指南

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

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

Redis数据类型与命令使用教程:哈希值

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

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

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

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

Redis数据类型与命令用法:综合指南

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

Set

Redis如何使用数据类型与命令?Redis set是唯一字符串的无序集合。由于集合没有排序,你不能像列表一样从索引的前端或末尾删除项目。但是,字符串是唯一的,并且同一项目的多个实例不可能出现在一个集合中。

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

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

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

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

Redis数据类型与命令用法:综合指南

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

Redis数据类型与命令用法:排序集

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

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

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

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

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

Redis数据类型与命令用法:综合指南

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

超级日志日志  

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

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

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

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

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

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

位图Bitmaps

Redis如何使用数据类型与命令?Redis 字符串是一个二进制序列,最大大小为 512 兆字节。位图允许你使用适当的命令在位级别上操作字符串。

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

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

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

Redis数据类型与命令用法结论

你现在已经全面了解 Redis 数据类型以及与每个数据结构相关的基本命令。Redis 为为你的应用程序设计可行且有效的存储解决方案提供了灵活性。

现在你已经熟悉了 Redis 数据类型,请查看我们的其他 Redis 教程,例如如何删除这些键值和清除 Redis 缓存。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: