在Redis中怎么使用Lists
在 Redis 中怎么使用 Lists
系列教程导航
本教程属于 Redis 管理系列的一部分,您可以参考以下相关指南:
- 如何在 ubuntu18.04 上安装和保护 redis
- 如何连接到 Redis 数据库
- 如何管理 Redis 数据库和 Keys
- 如何在 Redis 中管理副本和客户端
- 如何在 Redis 中管理字符串
- 如何在 Redis 中管理 list
- 如何在 Redis 中管理 Hashes
- 如何在 Redis 中管理 Sets
- 如何在 Redis 中管理 Sorted Sets
- 如何在 Redis 中运行事务
- 如何使 Redis 中的 Key 失效
- 如何解决 Redis 中的故障
- 如何从命令行更改 Redis 的配置
- Redis 数据类型简介
介绍
Redis 是一个开源的内存中键值数据存储系统。在 Redis 中,列表 (List) 是按插入顺序排序的字符串集合,类似于 链接列表 (Linked List)。本教程介绍了如何在 Redis 列表中创建和使用元素。
如何使用本指南
本指南以备有完整示例的速查表(Cheat Sheet)形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。
本指南中显示的命令已在运行 Redis 版本 4.0.9 的 Ubuntu 18.04 服务器上进行了测试。要设置类似的环境,您可以按照我们的指南 如何在 Ubuntu 18.04 上安装和保护 Redis 的 步骤 1 进行操作。我们将通过使用 Redis 命令行界面(redis-cli)运行它们来演示这些命令的行为。请注意,如果您使用其他 Redis 界面(例如 Redli),则某些命令的确切输出可能会有所不同。
另外,您可以提供一个托管的 Redis 数据库实例来测试这些命令,但是请注意,根据数据库提供者所允许的控制级别,本指南中的某些命令可能无法按所述方式工作。要配置 DigitalOcean 托管数据库,请遵循我们的 托管数据库产品文档。然后,您必须 安装 Redli 或 设置 TLS 隧道 才能通过 TLS 连接到托管数据库。
创建列表
一个键(Key)只能容纳一个列表,尽管任何列表都可以容纳多达 40 亿个元素。Redis 从左到右读取列表,您可以使用命令将新列表元素添加到列表的开头(“左”端),例如 lpush;也可以使用尾部(“右”端)添加新元素,例如 rpush。您还可以使用 lpush 或 rpush 创建新列表:
lpush key value这两个命令都将输出一个整数,以显示列表中有多少个元素。为了说明,请运行以下命令以创建包含“我思故我在”这一名言的列表:
lpush key_philosophy1 "therefore"
lpush key_philosophy1 "think"
rpush key_philosophy1 "I"
lpush key_philosophy1 "I"
rpush key_philosophy1 "am"最后一条命令的输出将显示为:
(integer) 5请注意,您可以使用单个 lpush 或 rpush 语句添加多个列表元素:
rpush key_philosophy1 "-" "Rene" "Decartes"lpushx 和 rpushx 命令也用于将元素添加到列表中,但仅当给定的列表已经存在时才会生效。如果任何一个命令失败(即键不存在或不是列表),它将返回 (integer) 0:
rpushx key_philosophy2 "Happiness" "is" "the" "highest" "good" "–" "Aristotle"(integer) 0要更改列表中的现有元素,请运行 lset 命令,然后输入键名、要更改的元素的索引和新值:
lset key_philosophy1 5 "sayeth"如果尝试将列表元素添加到不包含列表的现有键中,则会导致数据类型冲突并返回错误。例如,以下 set 命令创建一个保存字符串的键,因此以下尝试向其中添加列表元素的 lpush 操作将失败:
set key_philosophy3 "What is love?"
lpush key_philosophy3 "Baby don't hurt me"(error) WRONGTYPE Operation against a key holding the wrong kind of value无法将 Redis 密钥从一种数据类型转换为另一种数据类型,因此要将 key_philosophy3 变成列表,您需要删除该密钥并使用 lpush 或 rpush 命令重新开始。
从列表中检索元素
要检索列表中的项目范围,请使用 lrange 命令,后跟起始 偏移量 (Offset)) 和终止偏移量。每个偏移量都是从零开始的索引,0 表示列表中的第一个元素,1 代表下一个,依此类推。
以下命令将从上一节创建的示例列表中返回所有元素:
lrange key_philosophy1 0 71) "I"
2) "think"
3) "therefore"
4) "I"
5) "am"
6) "sayeth"
7) "Rene"
8) "Decartes"传递给 lrange 的偏移量也可以为负数。在这种情况下使用时,-1 代表列表中的最后一个元素,-2 代表列表中的倒数第二个元素,依此类推。以下示例返回保存在列表 key_philosophy1 中的最后三个元素:
lrange key_philosophy1 -3 -11) "I"
2) "am"
3) "sayeth"要从列表中检索单个元素,可以使用 lindex 命令。但是,此命令要求您提供元素的索引作为参数。与 lrange 一样,索引是从零开始的,这意味着第一个元素在索引 0,第二个元素在索引 1,依此类推:
lindex key_philosophy1 4"am"要查找给定列表中有多少个元素,请使用 llen 命令,该命令是"list length"的缩写:
llen key_philosophy1(integer) 8如果存储在给定键上的值不存在,llen 将返回错误。
从列表中删除元素
lrem 命令将删除与给定值匹配的定义次数的第一个出现项。要对此进行试验,请创建以下列表:
rpush key_Bond "Never" "Say" "Never" "Again" "You" "Only" "Live" "Twice" "Live" "and" "Let" "Die" "Tomorrow" "Never" "Dies"以下 lrem 示例将删除该值 "Live" 的第一次出现:
lrem key_Bond 1 "Live"此命令将输出从列表中删除的元素数量:
(integer) 1传递给 lrem 命令的数字也可以为负数。以下示例将删除该值 "Never" 的最后两次出现:
lrem key_Bond -2 "Never"(integer) 2lpop 命令从列表中删除并返回第一个或“最左边”的元素:
lpop key_Bond"Never"同样,要从列表中删除并返回最后或“最右边”的元素,请使用 rpop:
rpop key_Bond"Dies"Redis 还包括 rpoplpush 命令,该命令从列表中删除最后一个元素并将其推到另一个列表的开头:
rpoplpush key_Bond key_AfterToday"Tomorrow"如果传递给 rpoplpush 命令的源键和目标键相同,则它将实质上旋转列表中的元素。
结论
本指南详细介绍了可用于在 Redis 中创建和管理列表的许多命令。如果您想在本指南中概述其他相关的命令、参数或过程,请在下面的评论中提出疑问或提出建议。
有关 Redis 命令的更多信息,请参阅关于 如何管理 Redis 数据库的 系列教程。
说明
版本时效性说明:本文基于 Redis 4.0.9 版本及 Ubuntu 18.04 环境编写。虽然核心列表命令在后续版本中保持稳定,但部分输出格式或新特性可能有所不同。建议在生产环境中参考官方最新文档。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/zai-redis-zhong-zen-me-shi-yong-lists.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。