(Redis基础教程之六)如何使用Redis中的List 介绍Redis是一个开源的内存中键值数据存储。在Redis中列表是按插入顺序排序的字符串的集合类似于链接列表。本教程介绍了如何在Redis列表中创建和使用元素。如何使用本指南本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。本指南中显示的命令已在运行Redis版本4.0.9的Ubuntu 18.04服务器上进行了测试。要设置类似的环境您可以按照我们的指南如何在Ubuntu 18.04上安装和保护Redis的步骤1进行操作。我们将通过使用Redis命令行界面运行它们来演示这些命令的行为。请注意如果您使用其他Redis界面例如Redli则某些命令的确切输出可能会有所不同。redis-cli另外您可以提供一个托管的Redis数据库实例来测试这些命令但是请注意根据数据库提供者所允许的控制级别本指南中的某些命令可能无法按所述方式工作。要配置DigitalOcean托管数据库请遵循我们的托管数据库产品文档。然后您必须安装Redli或设置TLS隧道才能通过TLS连接到托管数据库。Creating Lists一个键只能容纳一个列表尽管任何列表都可以容纳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) 0rpushx 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 dont hurt me (error) WRONGTYPE Operation against a key holding the wrong kind of value无法将Redis密钥从一种数据类型转换为另一种数据类型因此要变成key_philosophy3列表您需要删除该密钥并使用lpushorrpush命令重新开始。从列表中检索元素(Retrieving Elements from a List)要检索列表中的项目范围请使用lrange命令后跟起始偏移量和终止偏移量。每个偏移量都是从零开始的索引0表示代表列表中的第一个元素1代表下一个依此类推。以下命令将从上一节创建的示例列表中返回所有元素lrange key_philosophy1 0 7 1) I 2) think 3) therefore 4) I 5) am 6) sayeth 7) Rene 8) Decartes传递给的偏移量lrange也可以为负数。在这种情况下使用时-1代表列表中的最后一个元素-2代表列表中的倒数第二个元素依此类推。以下示例返回保存在列表中的最后三个元素key_philosophy1lrange key_philosophy1 -3 -1 1) I 2) am 3) sayeth要从列表中检索单个元素可以使用lindex命令。但是此命令要求您提供元素的索引作为参数。与一样lrange索引是从零开始的这意味着第一个元素在index0第二个元素在index1依此类推lindex key_philosophy1 4 am要查找给定列表中有多少个元素请使用以下llen命令该命令是“listlength”的缩写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示例将删除该值的第一次出现Livelrem key_Bond 1 Live此命令将输出从列表中删除的元素数量(integer) 1传递给lrem命令的数字也可以为负数。以下示例将删除该值的最后两个出现Neverlrem key_Bond -2 Never (integer) 2该lpop命令从列表中删除并返回第一个或“最左边”的元素lpop key_Bond Never同样要从列表中删除并返回最后或“最右边”的元素请使用rpoprpop key_Bond DiesRedis还包括rpoplpush命令该命令从列表中删除最后一个元素并将其推到另一个列表的开头rpoplpush key_Bond key_AfterToday Tomorrow如果传递给rpoplpush命令的源键和目标键相同则它将实质上旋转列表中的元素。结论本指南详细介绍了可用于在Redis中创建和管理列表的许多命令。如果您想在本指南中概述其他相关的命令参数或过程请在下面的评论中提出疑问或提出建议。有关Redis命令的更多信息请参阅关于如何管理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 中如何使用 lua 脚本Redis 常用命令指南