介绍
Redis是一个开源的,内存中的关键值数据存储。在Redis中,一个 list是按插入顺序排序的字符串的集合,类似于链接列表。
如何使用此指南
这个指南是写成一个骗局的表,包含自含的示例,我们鼓励你跳到任何与你试图完成的任务相关的部分。
在本指南中显示的命令在运行 Redis 版本 6.0.1 版本的 Ubuntu 22.04 服务器上进行了测试。 要设置类似的环境,您可以遵循我们指南中的 Step 1 在 How To Install and Secure Redis on Ubuntu 22.04 上进行测试。 我们将通过使用 Redis 命令行接口的 redis-cli
来演示这些命令的行为。 如果您使用不同的 Redis 接口 - 例如 - 某些命令的准确输出可能会有所不同。
或者,您可以提供一个受管理的 Redis 数据库实例来测试这些命令,但根据数据库提供商允许的控制级别,本指南中的一些命令可能无法按描述的方式工作。 要提供 DigitalOcean 受管理数据库,请遵循我们的 管理数据库产品文档。
创建列表
一个键只能包含一个列表,但任何列表都可以包含超过四十亿个元素。Redis从左到右读取列表,您可以使用lpush
命令将新列表元素添加到列表的头部(左
端)或rpush
命令的尾巴(右
端)。
1lpush key value
两个命令都输出一个整数,显示列表中有多少个元素。
1lpush key_philosophy1 "therefore"
2lpush key_philosophy1 "think"
3rpush key_philosophy1 "I"
4lpush key_philosophy1 "I"
5rpush key_philosophy1 "am"
最后一个命令的输出将读到:
1[secondary_label Output]
2(integer) 5
请注意,您可以使用单个lpush
或rpush
语句添加多个列表元素:
1rpush key_philosophy1 "-" "Rene" "Decartes"
lpushx
和rpushx
命令也被用来添加元素到列表中,但只有在给定的列表已经存在时才会起作用。
1rpushx key_philosophy2 "Happiness" "is" "the" "highest" "good" "-" "Aristotle"
1[secondary_label Output]
2(integer) 0
若要更改列表中的现有元素,请运行lset
命令,然后是键名、要更改元素的索引和新值:
1lset key_philosophy1 5 "sayeth"
如果您尝试将列表元素添加到不包含列表的现有密钥中,则会导致数据类型的碰撞并返回错误,例如,下面的设置
命令会创建包含字符串的密钥,因此下面的尝试用推
添加列表元素将失败:
1set key_philosophy3 "What is love?"
2lpush key_philosophy3 "Baby don't hurt me"
1[secondary_label Output]
2(error) WRONGTYPE Operation against a key holding the wrong kind of value
无法将 Redis 密钥从一个数据类型转换为另一个数据类型,因此要将 key_philosophy3
转换为列表,您需要删除密钥并重新开始使用 lpush
或 rpush
命令。
从列表中获取元素
若要在列表中查找一系列项目,请使用lange
命令,然后是 start offset和 stop offset. 每个 offset 都是基于零的索引,这意味着0
代表列表中的第一个元素,1
代表下一个元素,等等。
以下命令将返回上一节创建的示例列表中的所有元素:
1lrange key_philosophy1 0 7
1[secondary_label Output]
21) "I"
32) "think"
43) "therefore"
54) "I"
65) "am"
76) "sayeth"
87) "Rene"
98) "Decartes"
在这种情况下,1
表示列表中的最后元素,2
表示列表中的第二到最后元素,等等。
1lrange key_philosophy1 -3 -1
1[secondary_label Output]
21) "I"
32) "am"
43) "sayeth"
若要从列表中获取单个元素,可以使用lindex
命令. 但是,这个命令要求你作为参数提供元素的索引. 与lrange
一样,索引是基于零的,这意味着第一个元素在索引0
,第二个元素在索引1
,等等:
1lindex key_philosophy1 4
1[secondary_label Output]
2"am"
要找出某一列表中有多少元素,请使用llen
命令,该命令是**l**ist **len**gth
的缩写:
1llen key_philosophy1
1[secondary_label Output]
2(integer) 8
如果存储在给定的密钥中的值不存在,则llen
将返回错误。
从列表中删除项目
lrem
命令删除与给定值相匹配的特定事件数量中的第一个,然后创建以下列表:
1rpush key_Bond "Never" "Say" "Never" "Again" "You" "Only" "Live" "Twice" "Live" "and" "Let" "Die" "Tomorrow" "Never" "Dies"
以下lrem
示例将删除值Live
的第一个发生:
1lrem key_Bond 1 "Live"
此命令将输出从列表中删除的元素的数量:
1[secondary_label Output]
2(integer) 1
传递给lrem
命令的数目也可能为负数,下面的示例会删除值Never
的最后两次发生:
1lrem key_Bond -2 "Never"
1[secondary_label Output]
2(integer) 2
lpop
命令删除并返回列表中的第一个或最左
元素:
1lpop key_Bond
1[secondary_label Output]
2"Never"
同样,要从列表中删除并返回最后一个或最正确的
元素,请使用rpop
:
1rpop key_Bond
1[secondary_label Output]
2"Dies"
Redis 还包括rpoplpush
命令,该命令从列表中删除最后一个元素,并将其推到另一个列表的开始:
1rpoplpush key_Bond key_AfterToday
1[secondary_label Output]
2"Tomorrow"
如果rpoplpush
命令中传输的源密钥和目标密钥是相同的,它基本上会旋转列表中的元素。
结论
本指南详细介绍了一些可以用于在 Redis 中创建和管理列表的命令. 如果在本指南中您想要了解的其他相关命令、论点或程序,请在评论中询问或提出建议。
有关 Redis 命令的更多信息,请参阅我们的教程系列 如何管理 Redis 数据库。