本系列教程如何在 ubuntu18.04 上安装和保护 redis如何连接到 Redis 数据库如何管理 Redis 数据库和 Keys如何在 Redis 中管理副本和客户端如何在 Redis 中管理字符串如何在 Redis 中管理 list如何在 Redis 中管理 Hashes如何在 Redis 中管理 Sets如何在 Redis 中管理 Sorted Sets如何在 Redis 中运行事务如何使 Redis 中的 Key 失效如何解决 Redis 中的故障如何从命令行更改 Redis 的配置Redis 数据类型简介在 Redis 中怎么使用 SetsRedis 是一个开源的内存中键值数据存储。集合 (Sets.html) 是存储在 Redis 给定键 (Key.html) 下的字符串集合。当保存在集合中时，单个记录值称为_成员 (Member.html)_。与列表 (List.html) 不同，集合是无序的，并且不允许重复的值。本教程说明了如何创建集合、检索和删除成员，以及比较不同集合的成员。如何使用本指南本指南以备有完整示例的速查表形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。本指南中显示的命令已在运行 Redis 版本 4.0.9 的 Ubuntu 18.04 服务器上进行了测试。要设置类似的环境，您可以按照我们的指南 如何在 Ubuntu 18.04 上安装和保护 Redis 的步骤 1进行操作。我们将通过使用 redis-cli 运行它们来演示这些命令的行为。请注意，如果您使用其他 Redis 界面（例如 Redli），则某些命令的确切输出可能会有所不同。另外，您可以提供一个托管的 Redis 数据库实例来测试这些命令，但是请注意，根据数据库提供者所允许的控制级别，本指南中的某些命令可能无法按所述方式工作。要配置 DigitalOcean 托管数据库，请遵循我们的 托管数据库产品文档。然后，您必须 安装 Redli 或 设置 TLS 隧道 才能通过 TLS 连接到托管数据库。创建集合 (Creating Sets.html)sadd 命令允许您创建一个集合并向其中添加一个或多个成员。下面的例子将创建一组在一个名为键 key_horror 与成员 "Frankenstein" 和 "Godzilla"：sadd key_horror "Frankenstein" "Godzilla"如果成功，sadd 将返回一个整数，显示它添加到集合中的成员数量：Output (integer.html) 2如果您尝试将集合的成员添加到已经持有非集合值的键中，它将返回错误。在此块中的第一个命令创建一个 列表 命名的 key_action 一个元素，"Shaft"。下一条命令尝试将 set 成员添加 "Shane" 到列表中，但是由于数据类型冲突而产生错误：rpush key_action "Shaft" sadd key_action "Shane"Output (error.html) WRONGTYPE Operation against a key holding the wrong kind of value请注意，集合不允许同一成员出现多次：sadd key_comedy "It's" "A" "Mad" "Mad" "Mad" "Mad" "Mad" "World"Output (integer.html) 4即使此 sadd 命令指定了八个成员，它也会丢弃四个重复的 "Mad" 成员，从而将大小设置为 4。从集合中检索成员 (Retrieving Members from Sets.html)在本节中，我们将介绍一些 Redis 命令，这些命令返回有关集合中持有的成员的信息。要练习此处概述的命令，请运行以下命令，这将创建一个由六个成员组成的集合，该集合的键为 key_stooges：sadd key_stooges "Moe" "Larry" "Curly" "Shemp" "Joe" "Curly Joe"要从集合中返回每个成员，请运行 smembers 命令，然后输入要检查的密钥：smembers key_stoogesOutput 1) "Curly" 2) "Moe" 3) "Larry" 4) "Shemp" 5) "Curly Joe" 6) "Joe"要检查特定值是否是集合的成员，请使用以下 sismember 命令：sismember key_stooges "Harpo"如果元素 "Harpo" 是 key_stooges 集合的成员，sismember 则将返回 1。否则，它将返回 0：Output (integer.html) 0要查看给定集合中有多少成员（换句话说，找到给定集合的_基数 (Cardinality.html)_），请运行 scard：scard key_stoogesOutput (integer.html) 6要从集合中返回随机元素，请运行 srandmember：srandmember key_stoogesOutput "Larry"要从集合中返回多个随机，不同的元素，可以在 srandmember 命令后加上要检索的元素数量：srandmember key_stooges 3Output 1) "Larry" 2) "Moe" 3) "Curly Joe"如果您向传递一个负数 srandmember，则该命令可以多次返回相同的元素：srandmember key_stooges -3Output 1) "Shemp" 2) "Curly Joe" 3) "Curly Joe"srandmember 尽管所使用的随机元素函数的性能在较大的数据集中有所改善，但它并不是完全随机的。有关更多详细信息，请参见 命令的官方文档。从集合中删除成员Redis 带有用于从一组删除成员三个命令：spop，srem，和 smove。spop 从中随机选择指定数量的成员并返回它们，类似于 srandmember，但是从集合中删除它们。它接受包含集合的键名和要从集合中删除的成员数作为参数。如果您未指定数字，spop 则默认为返回并删除单个值。以下示例命令将从 key_stooges 上一节创建的集合中删除并返回两个随机选择的元素：spop key_stooges 2Output 1) "Shemp" 2) "Larry"srem 允许您从集合中删除一个或多个特定成员，而不是随机成员：srem key_stooges "Joe" "Curly Joe"而不是返回从集合中删除的成员，而是 srem 返回一个整数，显示已删除的成员数：Output (integer.html) 2使用 smove 一个成员从一组移动到另一个。此命令以该顺序接受源集，目标集和要移动的成员作为参数。请注意，一次 smove 只能移动一位成员：smove key_stooges key_jambands "Moe"如果命令成功移动了成员，它将返回 (integer.html) 1：Output (integer.html) 1如果 smove 失败，它将返回 (integer.html) 0。请注意，如果目标键尚不存在，请 smove 在将成员移入之前创建它。比较集合Redis 还提供了许多命令，可以找到集合之间的差异和相似性。为了演示如何工作的，这部分将引用一个名为三套 presidents，kings 和 beatles。如果您想亲自尝试本节中的命令，请创建这些集合并使用以下 sadd 命令填充它们：sadd presidents "George" "John" "Thomas" "James" sadd kings "Edward" "Henry" "John" "James" "George" sadd beatles "John" "George" "Paul" "Ringo"sinter 比较不同的集合并返回_集合相交 (Intersection.html)_ 或出现在每个集合中的值：sinter presidents kings beatlesOutput 1) "John" 2) "George"sinterstore 执行类似的功能，但不是返回相交成员，而是在包含这些相交成员的指定目的地创建了一个新集合。请注意，如果目的地已经存在，sinterstore 将覆盖其内容：sinterstore new_set presidents kings beatles smembers new_setOutput 1) "John" 2) "George"sdiff 返回_集合差异 (Difference.html)_ — 由以下每个集合的第一个指定集合的​​差异得出的成员：sdiff presidents kings beatlesOutput 1) "Thomas"换句话说，sdiff 查看第一个给定集合中的每个成员，然后将其与每个连续集合中的成员进行比较。第一组中也出现在以下组中的任何成员都将被删除，并 sdiff 返回其余成员。可以将其视为从第一组中删除后续组的成员。sdiffstore 执行与相似的功能 sdiff，但不返回集合差，而是在给定的目的地创建一个包含集合差的新集合：sdiffstore new_set beatles kings presidents smembers new_setOutput 1) "Paul" 2) "Ringo"像一样 sinterstore，sdiffstore 将覆盖目标键（如果已存在）。sunion 返回_集合并集 (Union.html)_ 或包含您指定的每个集合的每个成员的集合：sunion presidents kings beatlesOutput 1) "Thomas" 2) "George" 3) "Paul" 4) "Henry" 5) "James" 6) "Edward" 7) "John" 8) "Ringo"sunion 将结果视为新集，因为它只允许出现任何给定成员。sunionstore 执行类似的功能，但是在给定的目的地创建一个包含集合并集的新集合，而不仅仅是返回结果：sunionstore new_set presidents kings beatlesOutput (integer.html) 8与 sinterstore 和一样 sdiffstore，sunionstore 如果目标键已经存在，它将覆盖目标键。结论本指南详细介绍了用于在 Redis 中创建和管理集的许多命令。如果您想在本指南中概述其他相关的命令，参数或过程，请在下面的评论中提出疑问或提出建议。有关 Redis 命令的更多信息，请参阅关于 如何管理 Redis 数据库的 系列教程。说明本教程基于 Redis 4.0.9 版本编写，部分命令行为在新版本中可能保持一致，但建议参考官方最新文档以获取更新特性。
系列教程导航如何在 Ubuntu 18.04 上安装和保护 Redis如何连接到 Redis 数据库如何管理 Redis 数据库和 Keys如何在 Redis 中管理副本和客户端如何在 Redis 中管理字符串如何在 Redis 中管理 list如何在 Redis 中管理 Hashes如何在 Redis 中管理 Sets如何在 Redis 中管理 Sorted Sets如何在 Redis 中运行事务如何使 Redis 中的 Key 失效如何解决 Redis 中的故障如何从命令行更改 Redis 的配置Redis 数据类型简介简介Redis 是一款知名的内存键值存储系统（In-Memory Key-Value Store），以其灵活性、高性能和广泛的语言支持而著称。本教程将演示如何在 Ubuntu 18.04 服务器上安装、配置和保护 Redis。先决条件要完成本指南，您需要满足以下条件：访问一台 Ubuntu 18.04 服务器。拥有一个具有 sudo 权限的非 root 用户。配置了基本防火墙。您可以按照我们的 初始服务器安装指南 进行设置。准备就绪后，请以 sudo 用户身份登录到 Ubuntu 18.04 服务器，然后继续后续步骤。第 1 步：安装和配置 Redis为了获得适用于 Ubuntu 存储库的稳定版本，我们将使用 apt 包管理器进行安装。首先，更新本地包缓存并安装 Redis：sudo apt update sudo apt install redis-server这将下载并安装 Redis 及其依赖项。安装完成后，我们需要对自动生成的 Redis 配置文件进行一项重要的更改。使用您喜欢的文本编辑器打开配置文件：sudo nano /etc/redis/redis.conf在文件内部，找到 supervised 指令。该指令允许您声明一个初始化系统来将 Redis 作为服务进行管理，从而为您提供对其操作的更多控制。默认情况下，该指令设置为 no。由于您正在运行使用 systemd 初始化系统的 Ubuntu，请将其更改为 systemd：# /etc/redis/redis.conf # If you run Redis from upstart or systemd, Redis can interact with your # supervision tree. Options: # supervised no - no supervision interaction # supervised upstart - signal upstart by putting Redis into SIGSTOP mode # supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET # supervised auto - detect upstart or systemd method based on # UPSTART_JOB or NOTIFY_SOCKET environment variables # Note: these supervision methods only signal "process is ready." # They do not enable continuous liveness pings back to your supervisor. supervised systemd这是目前唯一需要对 Redis 配置文件进行的更改。完成后保存并关闭文件。然后，重新启动 Redis 服务以应用配置更改：sudo systemctl restart redis.service至此，您已经安装并配置了 Redis，且服务正在运行。但在开始使用之前，建议先检查 Redis 是否运行正常。第 2 步：测试 Redis与任何新安装的软件一样，在进行进一步配置更改之前，最好确保 Redis 能够按预期运行。我们将通过几种方法来检查 Redis 在此步骤中是否正常工作。首先，检查 Redis 服务状态：sudo systemctl status redis如果它正在运行且无错误，命令将输出类似于以下内容的信息：● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled.html) Active: active (running.html) since Wed 2018-06-27 18:48:52 UTC; 12s ago Docs: http://redis.io/documentation, man:redis-server(1.html) Process: 2421 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS.html) Process: 2424 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS.html) Main PID: 2445 (redis-server.html) Tasks: 4 (limit: 4704.html) CGroup: /system.slice/redis-server.service └─2445 /usr/bin/redis-server 127.0.0.1:6379输出显示 Redis 正在运行且已启用（enabled），这意味着它被设置为在服务器每次启动时自动启动。注意： 对于许多常见用例，此设置是理想的。但是，如果您希望每次服务器启动时手动启动 Redis，可以使用以下命令禁用自动启动：sudo systemctl disable redis接下来，使用命令行客户端连接到服务器以测试功能：redis-cli在随后的提示符中，使用 ping 命令测试连接性：ping PONG此输出确认服务器连接有效。接下来，检查是否可以通过运行以下命令设置密钥（Key）：set test "It's working!" OK通过键入以下内容来检索值：get test假设一切正常，您将能够检索存储的值："It's working!"确认可以获取该值后，退出 Redis 提示符以返回 Shell：exit作为最终测试，我们将检查 Redis 即使在停止或重新启动后也能够持久保存数据。为此，请首先重新启动 Redis 实例：sudo systemctl restart redis然后再次与命令行客户端连接，并确认您的测试值仍然可用：redis-cli get test您的密钥值仍应可访问："It's working!"完成后再次退出：exit这样，您的 Redis 安装就可以完全运行并使用了。但是，其某些默认配置设置是不安全的，可能为恶意行为者提供攻击服务器及数据的机会。本教程的其余步骤介绍了 Redis 官方网站 所规定的缓解这些漏洞的方法。尽管这些步骤是可选的（如果不遵循，Redis 仍将工作），但强烈建议您完成这些步骤以增强系统安全性。第 3 步：绑定到本地主机默认情况下，Redis 仅能从 localhost 访问。但是，如果您通过遵循与本教程不同的指南安装和配置 Redis，可能已更新了配置文件以允许从任何地方连接。这不如绑定到 localhost 安全。要更正此问题，请打开 Redis 配置文件进行编辑：sudo nano /etc/redis/redis.conf找到以下行，并确保其未注释（如果存在 # 请删除）：# /etc/redis/redis.conf bind 127.0.0.1 ::1保存并关闭文件（按 CTRL + X，然后按 Y 确认，最后按 ENTER）。然后，重新启动服务以确保 systemd 读取您的更改：sudo systemctl restart redis要检查此更改是否已生效，请运行以下 netstat 命令：sudo netstat -lnp | grep redis输出应显示 redis-server 程序已绑定到 localhost（127.0.0.1）：tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server 如果您在该列中看到另一个 IP 地址（例如 0.0.0.0），则应再次检查是否取消了正确的行注释，然后重新启动 Redis 服务。现在，您的 Redis 安装仅在 localhost 上监听，恶意行为者更难发出请求或访问您的服务器。但是，Redis 当前未设置为要求用户在更改配置或数据之前进行身份验证。为了解决这个问题，Redis 允许您要求用户通过密码进行身份验证，然后才能通过 Redis 客户端（redis-cli）进行更改。第 4 步：配置 Redis 密码配置 Redis 密码可启用其内置安全功能之一 —— auth 命令，该命令要求客户端进行身份验证才能访问数据库。密码直接在 Redis 配置文件 /etc/redis/redis.conf 中配置，因此请再次使用编辑器打开该文件：sudo nano /etc/redis/redis.conf滚动到 SECURITY 部分，查找带有以下注释的指令：# /etc/redis/redis.conf # requirepass foobared通过删除 # 取消注释，然后将 foobared 更改为安全密码。注意： requirepass 指令上方有一条注释警告：# Warning: since Redis is pretty fast an outside user can try up to # 150k passwords per second against a good box. This means that you should # use a very strong password otherwise it will be very easy to break.因此，指定一个非常强且很长的值作为密码至关重要。您可以使用 openssl 命令生成随机密码，而无需自己编写。通过将第一个命令的输出传递到第二个 openssl 命令，如下所示，它将删除由第一个命令产生的任何换行符：openssl rand 60 | openssl base64 -A您的输出应类似于：RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE将命令的输出复制并粘贴为 requirepass 的新值，它应显示为：# /etc/redis/redis.conf requirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE设置密码后，保存并关闭文件，然后重新启动 Redis：sudo systemctl restart redis.service要测试密码是否有效，请访问 Redis 命令行：redis-cli以下显示了用于测试 Redis 密码是否有效的命令序列。第一条命令尝试在验证之前将密钥设置为一个值：set key1 10 (error.html) NOAUTH Authentication required.由于您未进行身份验证，无法使用，因此 Redis 返回错误。下一条命令使用 Redis 配置文件中指定的密码进行身份验证：auth your_redis_password OKRedis 确认认证通过。之后，再次运行前面的命令将成功：set key1 10 OK向 Redis 查询新密钥的值：get key1 10确认身份验证后可以在 Redis 客户端中运行命令后，您可以退出 redis-cli：quit接下来，我们将研究重命名 Redis 命令，以防错误或由恶意参与者输入 Redis 命令严重损坏您的计算机。第 5 步：重命名危险命令Redis 内置的另一个安全功能涉及重命名或完全禁用某些被认为是危险的命令。当由未经授权的用户运行时，此类命令可用于重新配置、破坏或擦除您的数据。与身份验证密码一样，重命名或禁用命令也在 /etc/redis/redis.conf 文件的 SECURITY 部分中配置。一些被认为是危险的命令包括：FLUSHDB、FLUSHALL、KEYS、PEXPIRE、DEL、CONFIG、SHUTDOWN、BGREWRITEAOF、BGSAVE、SAVE、SPOP、SREM、RENAME 和 DEBUG。这不是一个完整的列表，但是重命名或禁用该列表中的所有命令是增强 Redis 服务器安全性的一个很好的起点。是否应禁用或重命名命令取决于您的特定需求。如果您知道永远不会使用可能会被滥用的命令，则可以将其禁用。否则，重命名可能是更好的选择。要启用或禁用 Redis 命令，请再次打开配置文件：sudo nano /etc/redis/redis.conf警告： 以下显示如何禁用和重命名命令的步骤是示例。您应该只选择禁用或重命名对您有意义的命令。您可以自己查看命令的完整列表，并在 redis.io/commands 中确定如何滥用它们。要禁用命令，只需将其重命名为一个空字符串（由一对引号引起，它们之间没有字符），如下所示：# /etc/redis/redis.conf # It is also possible to completely kill a command by renaming it into # an empty string: rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG ""要重命名命令，请给其另一个名称，如下面的示例所示。重命名的命令应该使其他人难以猜到，但容易记住：# /etc/redis/redis.conf # rename-command CONFIG "" rename-command SHUTDOWN SHUTDOWN_MENOT rename-command CONFIG ASC12_CONFIG保存您的更改并关闭文件。重命名命令后，通过重新启动 Redis 来应用更改：sudo systemctl restart redis.service要测试新命令，请输入 Redis 命令行：redis-cli然后，验证身份：auth your_redis_password OK假设您像前面的示例一样将 CONFIG 命令重命名为 ASC12_CONFIG。首先，尝试使用原始 CONFIG 命令。它应该失败，因为您已将其重命名：config get requirepass (error.html) ERR unknown command 'config'但是，调用重命名的命令将成功（不区分大小写）：asc12_config get requirepass 1) "requirepass" 2) "your_redis_password"最后，您可以从 redis-cli 退出：exit请注意，如果您已经在使用 Redis 命令行，然后重新启动 Redis，则需要重新进行身份验证。否则，如果键入命令，则会出现此错误：NOAUTH Authentication required.关于重命名命令的做法，/etc/redis/redis.conf 的 SECURITY 节末尾有一条警告性声明：Please note that changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems.注意： Redis 项目选择使用术语“主（Master）”和“从（Slave）”，而 DigitalOcean 通常更喜欢使用“主要（Primary）”和“次要（Replica）”替代方案。为了避免混淆，我们选择在此处使用 Redis 文档中使用的术语。这意味着，如果重命名的命令不在 AOF 文件中，或者如果该重命名的命令尚未将 AOF 文件传输到从属设备，则应该没有问题。因此，在尝试重命名命令时，请记住这一点。重命名命令的最佳时间是在不使用 AOF 持久性时，或者在安装后即刚部署使用 Redis 的应用程序之前。当您使用 AOF 并处理主从安装时，请考虑 此答案（来自项目的 GitHub 问题页面）。以下是对作者问题的答复：命令将以发送命令的相同方式记录到 AOF 并复制到从属设备，因此，如果您尝试在没有相同重命名的实例上重播 AOF，则可能会遇到不一致的情况，因为命令无法执行（奴隶也一样）因此，在这种情况下处理重命名的最佳方法是确保将重命名的命令应用于主从安装中的所有实例。结论在本教程中，您已安装和配置 Redis，验证了您的 Redis 安装是否正常运行，并使用其内置的安全功能使其较不容易受到恶意行为者的攻击。说明： 本教程基于 Ubuntu 18.04 编写。截至 2023 年，Ubuntu 18.04 已结束标准支持（进入 ESM 阶段），且默认仓库中的 Redis 版本可能较旧（如 Redis 4.x 或 5.x）。如果您使用的是更新的 Ubuntu 版本或需要最新 Redis 特性，请参考官方文档调整安装源或配置项。
概述Redis 是一个开源的内存键值存储系统（In-Memory Key-Value Store）。作为一种 NoSQL 数据库，它不使用结构化查询语言（SQL），而是提供了一套专用的命令集用于管理和访问数据。本系列教程涵盖了广泛的 Redis 命令，重点内容包括：连接到 Redis 数据库管理各种数据类型故障排除与调试其他特定功能配置教程采用备忘单（Cheat Sheet）格式编写，并配有独立的示例代码。建议您根据实际需求，直接跳转至相关的指南章节。教程目录如何在 Ubuntu 18.04 上安装和保护 Redis如何连接到 Redis 数据库如何管理 Redis 数据库和 Keys如何在 Redis 中管理副本和客户端如何在 Redis 中管理字符串如何在 Redis 中管理 List如何在 Redis 中管理 Hashes如何在 Redis 中管理 Sets如何在 Redis 中管理 Sorted Sets如何在 Redis 中运行事务如何使 Redis 中的 Key 失效如何解决 Redis 中的故障如何从命令行更改 Redis 的配置Redis 数据类型简介说明版本时效：部分教程（如安装指南）可能基于 Ubuntu 18.04 等较早版本编写，请在实际操作时注意结合当前系统环境进行调整。术语对照：文中涉及的 Key、List、Hashes、Sets 等均为 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 常用命令指南介绍Redis 是一个开源的内存中键值数据存储（In-Memory Key-Value Store）。无论您是在本地安装 Redis 还是使用远程实例，都需要连接到该实例才能执行大多数操作。在本教程中，我们将介绍如何从命令行连接到 Redis，如何验证和测试您的连接，以及如何关闭 Redis 连接。如何使用本指南本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。本指南中显示的命令已在运行 Redis 版本 4.0.9 的 Ubuntu 18.04 服务器上进行了测试。要设置类似的环境，您可以按照我们的指南 如何在 Ubuntu 18.04 上安装和保护 Redis 的 步骤 1 进行操作。我们将通过使用 Redis 命令行界面 redis-cli 运行它们来演示这些命令的行为。请注意，如果您使用其他 Redis 界面（例如 Redli），则某些命令的确切输出可能会有所不同。另外，您可以提供一个托管的 Redis 数据库实例来测试这些命令。但是请注意，根据数据库提供者所允许的控制级别，本指南中的某些命令可能无法按所述方式工作。要配置 DigitalOcean 托管数据库，请遵循我们的 托管数据库产品文档。然后，您必须 安装 Redli 或 设置 TLS 隧道 才能通过 TLS 连接到托管数据库。连接到 Redis如果已 redis-server 在本地安装，则可以使用以下 redis-cli 命令连接到 Redis 实例：redis-cli这将带您进入 redis-cli 的 交互模式_，该 _模式 为您提供一个 read-eval-print loop (REPL.html)，您可以在其中运行 Redis 的内置命令并接收答复。在交互模式下，命令行提示符将更改以反映您的连接。在本示例以及本指南中的其他示例中，提示指示与本地托管的 Redis 实例的连接（127.0.0.1），并通过 Redis 的默认端口（6379）进行访问。在交互模式下运行 Redis 命令的替代方法是将它们作为 redis-cli 命令的参数运行，如下所示：redis-cli redis_command如果要连接到 远程 Redis 数据存储，可以分别使用 -h 和 -p 标志指定其主机和端口号。另外，如果您已将 Redis 数据库配置为要求输入密码，则可以在 -a 其后加上该标志并进行身份验证：redis-cli -h host -p port_number -a password如果您设置了 Redis 密码，则即使客户端未 redis-cli 命令中包含 -a 标志，客户端也可以连接到 Redis。但是，他们只有在通过身份验证后才能添加、更改或查询数据。要在连接后进行身份验证，请使用 auth 命令后跟密码：auth password如果传递给 auth 的密码有效，则命令将返回 OK。否则，它将返回错误。如果您正在使用托管 Redis 数据库，则云提供商可能会给您提供一个以 redis:// 或 rediss:// 开头的 URI，可用于访问数据存储。如果连接字符串以 redis:// 开头，则可以将其作为 redis-cli 连接参数。但是，如果您有一个以 rediss:// 开头的连接字符串，则意味着您的托管数据库需要通过 TLS / SSL 进行连接。redis-cli 原生不支持 TLS 连接，因此您需要使用支持 rediss 协议的其他工具才能与 URI 连接。对于需要通过 TLS 建立连接的 DigitalOcean 托管数据库，我们建议使用 Redli 访问 Redis 实例。使用以下语法通过 Redli 连接到数据库。请注意，此示例包括 --tls 选项（该选项指定应通过 TLS 建立连接）和 -u 标志（该标志声明以下参数将是连接 URI）：redli --tls -u rediss://connection_URI如果您尝试连接到不可用的实例，redis-cli 将进入 _断开连接模式_。提示将反映以下内容：Could not connect to Redis at 127.0.0.1:6379: Connection refused每次在断开连接状态下运行命令时，Redis 都会尝试重新建立连接。测试连接ping 命令对于测试与数据库的连接是否有效很有用。请注意，这是 Redis 特定的命令，与 ping 网络实用程序) 不同。但是，两者共享相似的功能，因为它们都用于检查两台计算机之间的连接。如果连接建立并且不包含任何参数，则 ping 命令将返回 PONG：pingPONG如果为 ping 命令提供参数，它将返回该参数，而不是 PONG，表示连接成功：ping "hello Redis!""hello Redis!"如果 ping 以断开连接的方式运行或其他任何命令，您将看到类似以下的输出：pingCould not connect to Redis at host:port: Connection refused注意，Redis 在内部也使用 ping 来测量延迟。与 Redis 断开连接要与 Redis 实例断开连接，请使用以下 quit 命令：quit运行 exit 也会退出连接：exitquit 和 exit 都会关闭连接，但是只有在所有未决答复都已写到客户端后，才可以。结论本指南详细介绍了用于建立、测试和关闭与 Redis 服务器的连接的许多命令。如果您想在本指南中看到其他相关的命令、参数或过程，请在下面的评论中提出疑问或提出建议。有关 Redis 命令的更多信息，请参阅关于 如何管理 Redis 数据库的 系列教程。说明：本文内容基于 Ubuntu 18.04 和 Redis 4.0.9 版本编写。较新的 Redis 版本或操作系统可能在默认配置、命令输出或安全性要求上有所不同，请根据实际情况调整。
在 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 中如何使用 lua 脚本Redis 常用命令指南介绍Redis 是一个开源的内存中键值数据存储系统。在 Redis 中，列表 (List.html) 是按插入顺序排序的字符串集合，类似于 链接列表 (Linked List.html)。本教程介绍了如何在 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.html) 5请注意，您可以使用单个 lpush 或 rpush 语句添加多个列表元素：rpush key_philosophy1 "-" "Rene" "Decartes"lpushx 和 rpushx 命令也用于将元素添加到列表中，但仅当给定的列表已经存在时才会生效。如果任何一个命令失败（即键不存在或不是列表），它将返回 (integer.html) 0：rpushx key_philosophy2 "Happiness" "is" "the" "highest" "good" "–" "Aristotle"(integer.html) 0要更改列表中的现有元素，请运行 lset 命令，然后输入键名、要更改的元素的索引和新值：lset key_philosophy1 5 "sayeth"如果尝试将列表元素添加到不包含列表的现有键中，则会导致数据类型冲突并返回错误。例如，以下 set 命令创建一个保存字符串的键，因此以下尝试向其中添加列表元素的 lpush 操作将失败：set key_philosophy3 "What is love?" lpush key_philosophy3 "Baby don't hurt me"(error.html) WRONGTYPE Operation against a key holding the wrong kind of value无法将 Redis 密钥从一种数据类型转换为另一种数据类型，因此要将 key_philosophy3 变成列表，您需要删除该密钥并使用 lpush 或 rpush 命令重新开始。从列表中检索元素要检索列表中的项目范围，请使用 lrange 命令，后跟起始 偏移量 (Offset.html)) 和终止偏移量。每个偏移量都是从零开始的索引，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.html) 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.html) 1传递给 lrem 命令的数字也可以为负数。以下示例将删除该值 "Never" 的最后两次出现：lrem key_Bond -2 "Never"(integer.html) 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 环境编写。虽然核心列表命令在后续版本中保持稳定，但部分输出格式或新特性可能有所不同。建议在生产环境中参考官方最新文档。
如何在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还是在使用远程实例，都需要连接到该实例才能执行大多数操作。在本教程中，我们将介绍如何从命令行连接到Redis，如何验证和测试您的连接以及如何关闭Redis连接。如何使用本指南本指南以备有完整示例的备忘单形式编写。我们鼓励您跳至与您要完成的任务相关的任何部分。本指南中显示的命令已在运行Redis版本4.0.9的Ubuntu 18.04服务器上进行了测试。要设置类似的环境，您可以按照我们的指南如何在Ubuntu 18.04上安装和保护Redis的步骤1进行操作。我们将通过使用Redis命令行界面运行它们来演示这些命令的行为。请注意，如果您使用其他Redis界面（例如Redli），则某些命令的确切输出可能会有所不同。redis-cli另外，您可以提供一个托管的Redis数据库实例来测试这些命令，但是请注意，根据数据库提供者所允许的控制级别，本指南中的某些命令可能无法按所述方式工作。要配置DigitalOcean托管数据库，请遵循我们的托管数据库产品文档。然后，您必须 安装Redli 或 设置TLS隧道才能通过TLS连接到托管数据库。连接到Redis如果已redis-server 在本地安装，则可以使用以下redis-cli命令连接到Redis实例：redis-cli 这将带您进入redis-cli的_交互模式_，该_模式_为您提供一个read-eval-print循环（REPL），您可以在其中运行Redis的内置命令并接收答复。在交互模式下，命令行提示符将更改以反映您的连接。在本示例以及本指南中的其他示例中，提示指示与本地托管的Redis实例的连接（127.0.0.1），并通过Redis的默认端口（6379）进行访问：在交互模式下运行Redis命令的替代方法是将它们作为redis-cli命令的参数运行，如下所示：redis-cli redis_command 如果要连接到远程 Redis数据存储，可以分别使用-h和-p标志指定其主机和端口号。另外，如果您已将Redis数据库配置为要求输入密码，则可以在-a其后加上该标志并进行身份验证：redis-cli -h host -p port_number -a password 如果您设置了Redis密码，则即使客户端未-a在redis-cli命令中包含该标志，客户端也可以连接到Redis 。但是，他们只有在通过身份验证后才能添加，更改或查询数据。要在连接后进行身份验证，请使用auth命令后跟密码：auth password 如果传递给的密码auth有效，则命令将返回OK。否则，它将返回错误。如果您正在使用托管Redis数据库，则云提供商可能会给您提供一个以URI开头redis://或rediss://可用于访问数据存储的URI 。如果连接字符串以开头redis://，则可以将其作为redis-cli连接参数。但是，如果您有一个以开头的连接字符串，则rediss://意味着您的托管数据库需要通过TLS / SSL进行连接。redis-cli不支持TLS连接，因此您需要使用支持rediss协议的其他工具才能与URI连接。对于需要通过TLS建立连接的DigitalOcean托管数据库，我们建议使用Redli访问Redis实例。使用以下语法通过Redli连接到数据库。请注意，此示例包括--tls选项（该选项指定应通过TLS建立连接）和-u标志（该标志声明以下参数将是连接URI）：redli --tls -u rediss://connection_URI 我尝试连接到不可用的实例，redis-cli将进入_断开连接模式_。提示将反映以下内容：每次在断开连接状态下运行命令时，Redis都会尝试重新建立连接。测试连接该ping命令对于测试与数据库的连接是否有效很有用。请注意，这是Redis特定的命令，与ping网络实用程序)不同。但是，两者共享相似的功能，因为它们都用于检查两台计算机之间的连接。如果连接建立并且不包含任何参数，则ping命令将返回PONG：ping PONG 如果为ping命令提供参数，它将返回该参数，而不是PONG连接成功：ping "hello Redis!" "hello Redis!" 如果ping以断开连接的方式运行或其他任何命令，您将看到类似以下的输出：ping Could not connect to Redis at host:port: Connection refused 注意，pingRedis在内部也使用它来测量延迟。与Redis断开连接要与Redis实例断开连接，请使用以下quit命令：quit 运行exit也会退出连接：exit 两者quit和exit都会关闭连接，但是只有在所有未决答复都已写到客户端后，才可以。结论本指南详细介绍了用于建立，测试和关闭与Redis服务器的连接的许多命令。如果您想在本指南中看到其他相关的命令，参数或过程，请在下面的评论中提出疑问或提出建议。有关Redis命令的更多信息，请参阅关于如何管理Redis数据库的系列教程。
Redis是一个开源的内存中键值数据存储。Redis是NoSQL数据库，它不使用结构化查询语言，也称为SQL。相反，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数据类型简介