(Redis基础教程之六)如何使用Redis中的List

  1. 如何在ubuntu18.04上安装和保护redis
  2. 如何连接到Redis数据库
  3. 如何管理Redis数据库和Keys
  4. 如何在Redis中管理副本和客户端
  5. 如何在Redis中管理字符串
  6. 如何在Redis中管理list
  7. 如何在Redis中管理Hashes
  8. 如何在Redis中管理Sets
  9. 如何在Redis中管理Sorted Sets
  10. 如何在Redis中运行事务
  11. 如何使Redis中的Key失效
  12. 如何解决Redis中的问题
  13. 如何从命令行更改Redis的配置
  14. Redis数据类型简介

介绍

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。您还可以使用lpushrpush创建新列表:

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

请注意,您可以使用单个lpushrpush语句添加多个列表元素:

rpush key_philosophy1 "-" "Rene" "Decartes"

lpushxrpushx命令也用于元素添加到列表中,但如果给定的名单已经存在只会工作。如果任何一个命令失败,它将返回(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列表,您需要删除该密钥并使用lpushor rpush命令重新开始。

从列表中检索元素(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_philosophy1

lrange key_philosophy1 -3 -1


1) "I"
2) "am"
3) "sayeth"

要从列表中检索单个元素,可以使用lindex命令。但是,此命令要求您提供元素的索引作为参数。与一样lrange,索引是从零开始的,这意味着第一个元素在index 0,第二个元素在index 1,依此类推:

lindex key_philosophy1 4


"am"

要查找给定列表中有多少个元素,请使用以下llen命令,该命令是“ l ist len gth”的缩写:

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) 2

lpop命令从列表中删除并返回第一个或“最左边”的元素:

lpop key_Bond


"Never"

同样,要从列表中删除并返回最后或“最右边”的元素,请使用rpop

rpop key_Bond


"Dies"

Redis还包括rpoplpush命令,该命令从列表中删除最后一个元素并将其推到另一个列表的开头:

rpoplpush key_Bond key_AfterToday


"Tomorrow"

如果传递给rpoplpush命令的源键和目标键相同,则它将实质上旋转列表中的元素。

结论

本指南详细介绍了可用于在Redis中创建和管理列表的许多命令。如果您想在本指南中概述其他相关的命令,参数或过程,请在下面的评论中提出疑问或提出建议。

有关Redis命令的更多信息,请参阅关于如何管理Redis数据库的系列教程。

posted on 2020-05-17 07:55  分布式编程  阅读(484)  评论(0编辑  收藏

导航