Redis 命令行客户端连接方法 – wiki基地


深入理解 Redis 命令行客户端连接方法:一份详尽的指南

引言

Redis 作为一款高性能的键值存储数据库,以其速度快、功能丰富和易于使用而广受欢迎。与 Redis 交互的最直接和常用的方式之一,就是通过其官方提供的命令行客户端 redis-cliredis-cli 不仅是一个功能强大的工具,用于执行 Redis 命令、管理服务器和进行故障排除,它更是理解 Redis 内部工作原理的一个重要窗口。

然而,要充分发挥 redis-cli 的威力,首先需要掌握如何正确地连接到 Redis 服务器。Redis 服务器可能运行在本地、远程机器上,可能监听默认端口或自定义端口,可能需要密码认证,甚至可能部署在集群环境中,或者需要通过 Unix Socket、TLS/SSL 等方式连接。理解这些不同的连接场景及其对应的 redis-cli 参数至关重要。

本文将为您提供一份详尽的 redis-cli 连接方法指南,从最基础的默认连接,到复杂的 TLS 安全连接和集群连接,逐一进行深入探讨。我们将详细解释每种连接方式的用途、所需的参数、使用示例以及潜在的注意事项。无论您是 Redis 的初学者还是有经验的管理员,本文都将帮助您更扎实地掌握 redis-cli 的连接技巧。

准备工作:确保 redis-cli 可用

在开始学习连接方法之前,您需要确保以下两点:

  1. Redis 服务器正在运行: redis-cli 是客户端工具,它需要连接到一个正在运行的 Redis 服务器实例。请确认您的目标 Redis 服务器已经启动并且监听着网络端口或 Unix Socket。
  2. redis-cli 已安装并可执行: redis-cli 通常随着 Redis 服务器一起安装。如果您只安装了 Redis 服务器,那么 redis-cli 应该就在 Redis 的安装目录或系统路径中。如果您只是需要客户端工具而不想安装整个服务器,也可以单独获取 Redis 客户端包(例如通过包管理器安装 redis-tools)。在终端中输入 redis-cli 并按回车,如果出现 127.0.0.1:6379> 提示符或相关的错误信息,说明 redis-cli 命令是可用的。

准备就绪后,我们就可以开始探索各种连接方式了。

1. 最基本的连接:默认主机和端口

这是 redis-cli 最简单、最常用的连接方式。当您不指定任何连接参数时,redis-cli 会尝试连接到本地机器的默认 Redis 服务器,即主机 127.0.0.1 (IPv4 Loopback 地址) 和端口 6379 (Redis 默认端口)。

命令格式:

bash
redis-cli

示例:

在终端中直接输入:

bash
redis-cli

如果连接成功,您将看到如下提示符:

127.0.0.1:6379>

这表示您已经成功连接到本地 Redis 服务器,现在可以在提示符后输入 Redis 命令了,例如:

127.0.0.1:6379> PING
PONG
127.0.0.1:6379> SET mykey "Hello, Redis!"
OK
127.0.0.1:6379> GET mykey
"Hello, Redis!"
127.0.0.1:6379> QUIT

适用场景:

  • Redis 服务器运行在与客户端同一台机器上,且监听默认的 127.0.0.1:6379 地址。
  • 进行本地开发、测试或管理。

注意事项:

  • 如果 Redis 服务器运行在不同的主机或端口,或者需要密码认证,这种默认连接方式将无法成功。

2. 连接到指定的主机和端口

在许多情况下,Redis 服务器可能运行在另一台机器上,或者监听在非默认端口上。这时就需要明确指定要连接的主机和端口。

redis-cli 提供了 -h 参数用于指定主机(Hostname 或 IP 地址),-p 参数用于指定端口号。

命令格式:

bash
redis-cli -h <hostname_or_ip> -p <port>

参数说明:

  • -h <hostname_or_ip>:指定 Redis 服务器的主机名或 IP 地址。
  • -p <port>:指定 Redis 服务器监听的端口号。

示例:

连接到 IP 地址为 192.168.1.100、端口为 6379 的远程 Redis 服务器:

bash
redis-cli -h 192.168.1.100 -p 6379

连接到主机名为 redis.example.com、端口为 6380 的服务器:

bash
redis-cli -h redis.example.com -p 6380

如果连接成功,提示符将显示连接到的主机和端口:

192.168.1.100:6379>

适用场景:

  • 连接到运行在远程服务器上的 Redis 实例。
  • 连接到运行在本地但监听非默认端口的 Redis 实例。
  • 连接到具有特定 IP 地址的本地网络接口(而非 127.0.0.1)。

注意事项:

  • 确保客户端机器可以访问到指定主机和端口。这可能涉及到网络防火墙的配置。
  • 如果服务器需要密码认证,还需要结合认证参数(见下一节)。

3. 连接时进行身份验证 (Authentication)

为了增强安全性,许多 Redis 服务器配置了密码认证。客户端在连接后需要提供正确的密码才能执行除少数命令(如 AUTH, PING, QUIT, HELLO)之外的其他命令。

redis-cli 支持两种进行身份验证的方式:在连接时通过参数指定密码,或在连接成功后使用 AUTH 命令。

3.1 通过 -a 参数在连接时指定密码

这是最直接的方式,将密码作为 -a 参数的值传递。

命令格式:

bash
redis-cli -a <password> -h <hostname_or_ip> -p <port>

参数说明:

  • -a <password>:指定用于身份验证的密码。

示例:

连接到 192.168.1.100:6379,使用密码 mypassword

bash
redis-cli -h 192.168.1.100 -p 6379 -a mypassword

如果密码正确且连接成功,您会直接进入交互模式,可以执行任何命令。如果密码错误,服务器会拒绝执行后续命令,返回 (error) WRONGPASS invalid password

适用场景:

  • 快速连接到需要密码认证的服务器进行临时操作。

重要安全警告:

  • 极力避免在命令行中直接写出密码,尤其是在共享终端或脚本中! 命令行参数可能会被记录在系统的命令历史记录中(如 ~/.bash_history),或者通过进程列表(ps aux)被其他用户看到,从而导致密码泄露。
  • 对于自动化脚本或需要频繁连接的场景,考虑使用更安全的方式管理密码(例如从文件中读取,或者通过环境变量传递,但这取决于您的脚本逻辑,redis-cli 本身没有内置直接从文件读取密码的参数)。

3.2 连接成功后使用 AUTH 命令

这是一种更安全的交互式认证方式,尤其是在手动连接时推荐使用。先不带密码连接,进入交互模式后,再执行 AUTH 命令提供密码。

命令格式 (连接部分):

bash
redis-cli -h <hostname_or_ip> -p <port>

连接后执行命令:

<hostname_or_ip>:<port>> AUTH <password>

示例:

连接到 192.168.1.100:6379 (需要密码):

bash
redis-cli -h 192.168.1.100 -p 6379

进入交互模式后,尝试执行命令(会失败):

192.168.1.100:6379> GET mykey
(error) NOAUTH Authentication required.

然后执行 AUTH 命令:

192.168.1.100:6379> AUTH mypassword
OK

如果密码正确,服务器返回 OK。现在可以正常执行其他命令了:

192.168.1.100:6379> GET mykey
"Hello, Redis!"

适用场景:

  • 手动连接到需要密码认证的服务器。
  • 在交互式会话中执行敏感操作前进行认证。
  • 作为比 -a 参数更安全的认证方式。

注意事项:

  • 在执行 AUTH 命令之前,大多数其他命令都会返回 (error) NOAUTH Authentication required.
  • 如果服务器配置了 ACL (Access Control Lists),AUTH 命令可能需要用户名和密码(AUTH <username> <password>),但 redis-cli -a 参数只支持密码。对于 ACL,您可能需要使用 redis-cli --username <username> --password <password> 参数(较新版本支持)。

4. 连接到指定的数据库

一个 Redis 实例可以包含多个逻辑数据库,通过数字索引区分,默认从 0 开始。默认情况下,redis-cli 连接到数据库 0。您可以使用 -n 参数在连接时指定要使用的数据库索引。

命令格式:

bash
redis-cli -n <db_number> -h <hostname_or_ip> -p <port> -a <password>

参数说明:

  • -n <db_number>:指定要连接的数据库索引(0 到 DB_COUNT-1)。

示例:

连接到本地默认端口的 Redis 服务器,并选择数据库 5:

bash
redis-cli -n 5

连接到远程服务器 192.168.1.100:6379,使用密码 mypassword,并选择数据库 2:

bash
redis-cli -h 192.168.1.100 -p 6379 -a mypassword -n 2

连接成功后,提示符会显示当前连接的数据库索引:

127.0.0.1:6379[5]>

或者在远程/非默认端口情况下:

192.168.1.100:6379[2]>

适用场景:

  • 在一个 Redis 实例中使用了多个逻辑数据库,需要连接到特定的数据库进行操作。

注意事项:

  • 连接后也可以使用 SELECT <db_number> 命令在不同数据库之间切换。例如,在连接成功后,输入 SELECT 10 即可切换到数据库 10。
  • 在 Redis Cluster 模式下,不支持多数据库功能,-n 参数将无效。

5. 通过 Unix Domain Socket 连接

除了通过 TCP/IP 网络连接,Redis 服务器也可以配置为监听 Unix Domain Socket。通过 Socket 连接通常比通过 TCP/IP 连接更快(尤其是在同一台机器上),并且可以利用文件系统权限进行访问控制,提供额外的安全层(只有有权访问 Socket 文件的用户或组才能连接)。

redis-cli 使用 -s 参数指定 Socket 文件的路径。

命令格式:

bash
redis-cli -s <socket_path> -a <password> -n <db_number>

参数说明:

  • -s <socket_path>:指定 Redis 服务器监听的 Unix Domain Socket 文件的完整路径。

示例:

连接到位于 /var/run/redis/redis.sock 的 Unix Socket:

bash
redis-cli -s /var/run/redis/redis.sock

如果服务器需要密码认证:

bash
redis-cli -s /var/run/redis/redis.sock -a mypassword

连接成功后,提示符会显示 Socket 路径:

/var/run/redis/redis.sock>

适用场景:

  • 客户端和服务器运行在同一台机器上。
  • 追求更高的本地连接性能。
  • 希望利用文件系统权限进行访问控制,增强本地安全性。

注意事项:

  • Redis 服务器必须配置为监听 Unix Socket(在 redis.conf 中设置 unixsocketunixsocketperm)。
  • 客户端进程需要有足够的权限读取和写入指定的 Socket 文件。
  • Unix Socket 只适用于客户端和服务器在同一台机器上的情况。

6. 通过 Redis URI 连接

Redis URI (Uniform Resource Identifier) 提供了一种更统一和简洁的方式来指定连接参数,特别是当连接信息(主机、端口、密码、数据库)较多时。URI 格式类似于 URL,通常以 redis:// 开头。

redis-cli 使用 --uri 参数接受 Redis URI。

命令格式:

bash
redis-cli --uri <redis_uri>

Redis URI 格式:

基本的 Redis URI 格式为:

redis://[user:password@]host:port[/db]

  • redis://: 协议标识符。
  • user:password@ (可选): 用户名和密码,用于 ACL 或密码认证。对于 ACL,需要指定用户名和密码;对于只使用密码的情况,可以只指定密码,格式为 :password@
  • host: Redis 服务器的主机名或 IP 地址。
  • port (可选): 端口号,如果省略通常使用默认端口 6379。
  • /db (可选): 数据库索引,如果省略通常使用数据库 0。

对于 Unix Socket 连接,URI 格式为:

redis://[/path/to/redis.sock]?db=<db>

  • /path/to/redis.sock: Socket 文件的路径。
  • ?db=<db> (可选): 数据库索引。

示例:

连接到 127.0.0.1:6379

bash
redis-cli --uri redis://127.0.0.1:6379

连接到 192.168.1.100:6380,使用密码 mypassword,并选择数据库 3:

bash
redis-cli --uri redis://:[email protected]:6380/3

连接到使用 ACL 的服务器,用户名为 myuser,密码为 mypassword,主机 redis.example.com 端口 6379:

bash
redis-cli --uri redis://myuser:[email protected]:6379

(注意:redis-cli 对 ACL 的 URI 支持可能依赖于版本,旧版本可能只支持 password@ 格式)

连接到 Unix Socket /var/run/redis/redis.sock,并选择数据库 1:

bash
redis-cli --uri redis://%2Fvar%2Frun%2Fredis%2Fredis.sock?db=1

(注意:Socket 路径中的斜杠 / 需要进行 URI 编码,%2F 代表 /)

适用场景:

  • 需要通过单个参数指定多种连接信息。
  • 在脚本或配置文件中统一管理连接字符串。
  • 与其他支持 Redis URI 格式的工具或库集成。

注意事项:

  • 在 URI 中直接包含密码存在与 -a 参数类似的安全风险(命令历史记录、进程列表)。
  • URI 格式需要正确遵循规范,特别是特殊字符(如密码中的 :@)可能需要进行 URI 编码。
  • 对于 Unix Socket URI,路径中的 / 需要编码为 %2F

7. 安全连接:TLS/SSL 加密

在生产环境中,尤其是在公共网络上传输数据时,为了保护数据的机密性和完整性,通常需要使用 TLS/SSL 对连接进行加密。redis-cli 通过一系列 --tls 开头的参数支持 TLS 连接。

使用 TLS 连接需要服务器端已经配置并启用了 TLS。客户端需要信任服务器的证书颁发机构 (CA),或者直接信任服务器证书。

常用 TLS 连接参数:

  • --tls: 启用 TLS 加密连接。
  • --cacert <file>: 指定 CA 证书文件的路径,用于验证服务器证书。
  • --cert <file>: 指定客户端证书文件的路径(如果服务器配置要求客户端证书)。
  • --key <file>: 指定客户端私钥文件的路径(与 --cert 配合使用)。
  • --tls-hostname <hostname>: 指定 TLS 握手时使用的 hostname,用于服务器验证(SNI – Server Name Indication)以及客户端验证服务器证书中的 Common Name 或 Subject Alternative Names。通常应该与你连接的主机名一致。
  • --tls-ciphers <ciphers>: 指定允许使用的 TLS 密码套件列表(高级选项)。
  • --insecure: 危险! 禁用服务器证书验证。仅用于测试环境,切勿在生产环境使用。 这会使连接容易受到中间人攻击。

命令格式 (常用):

bash
redis-cli -h <hostname> -p <tls_port> --tls --cacert <ca_cert_file> -a <password>

如果需要客户端证书认证:

bash
redis-cli -h <hostname> -p <tls_port> --tls --cacert <ca_cert_file> --cert <client_cert_file> --key <client_key_file> -a <password>

示例:

连接到主机 redis.example.com 的 TLS 端口 6380,使用 CA 证书 /etc/ssl/certs/ca.crt 验证服务器,并使用密码 mypassword

bash
redis-cli -h redis.example.com -p 6380 --tls --cacert /etc/ssl/certs/ca.crt -a mypassword

连接时指定 TLS hostname (SNI):

bash
redis-cli -h redis.example.com -p 6380 --tls --cacert /etc/ssl/certs/ca.crt --tls-hostname redis.example.com -a mypassword

适用场景:

  • 在公共网络或不受信任的网络中连接 Redis,确保数据传输的安全性。
  • 满足合规性或安全策略要求。

注意事项:

  • TLS 连接需要在 Redis 服务器端进行复杂的配置(生成证书、配置 redis.conf 中的 tls-* 参数)。
  • 客户端需要获取正确的 CA 证书文件,并可能需要客户端证书和私钥文件。
  • 确保 --tls-hostname 参数的值与服务器证书中的 Common Name 或 Subject Alternative Names 匹配,以便客户端能够正确验证服务器身份。
  • 避免在生产环境中使用 --insecure 参数。

8. 连接到 Redis Cluster

Redis Cluster 是 Redis 的分布式实现,数据分布在多个节点上。redis-cli 可以通过 -c 参数以集群模式连接到集群中的 任意一个节点。一旦连接上,redis-cli 就会自动获取集群的拓扑信息,并能够根据需要将命令重定向到处理相应 key 的正确节点。

命令格式:

bash
redis-cli -c -h <cluster_node_hostname_or_ip> -p <cluster_node_port> -a <password> --tls ...

参数说明:

  • -c: 启用集群模式。

示例:

连接到集群中一个节点 192.168.1.101:7000

bash
redis-cli -c -h 192.168.1.101 -p 7000

连接到需要密码认证的集群节点:

bash
redis-cli -c -h 192.168.1.101 -p 7000 -a clusterpassword

连接到启用 TLS 的集群节点:

bash
redis-cli -c -h redis-cluster-node1.example.com -p 7001 --tls --cacert /etc/ssl/certs/cluster_ca.crt -a clusterpassword

连接后的行为:

在集群模式下,redis-cli 提示符会显示当前连接的节点地址。当您执行涉及特定 key 的命令时(如 GET mykey),如果该 key 不在当前连接的节点上,redis-cli 会自动处理 MOVED 或 ASK 重定向,连接到正确的节点执行命令,并显示重定向信息。

192.168.1.101:7000> SET mykey "cluster value"
-> Redirected to slot 12345 asking 192.168.1.102:7001
OK
192.168.1.102:7001> GET mykey
-> Redirected to slot 12345 asking 192.168.1.102:7001
"cluster value"

(注意:重定向信息是 redis-cli 为了可视化而打印的,实际交互是在后台进行的)

适用场景:

  • 管理和操作 Redis Cluster。
  • 执行跨节点的命令(尽管 Redis Cluster 主要设计用于客户端进行分片,redis-cli -c 提供了方便的命令行交互)。

注意事项:

  • -c 参数非常重要,没有它,您只能与连接到的那个节点交互,无法利用集群的重定向功能。
  • 在集群模式下,-n 参数(选择数据库)是无效的,因为 Redis Cluster 不支持多数据库。
  • 连接集群的任何一个主节点或从节点理论上都可以,但连接主节点更常见。

9. 以非交互模式执行单个命令

除了进入交互式会话,redis-cli 也可以用于直接在命令行中执行单个 Redis 命令,并将结果输出到标准输出。这对于脚本、自动化任务或快速查询非常有用。

命令格式:

bash
redis-cli [connection_options] <command> [arg1 arg2 ...]

示例:

获取本地默认 Redis 服务器的 PING 结果:

bash
redis-cli PING
PONG

设置远程服务器 192.168.1.100:6379 上的一个键,并使用密码:

bash
redis-cli -h 192.168.1.100 -p 6379 -a mypassword SET mykey "Hello from script"
OK

获取该键的值:

bash
redis-cli -h 192.168.1.100 -p 6379 -a mypassword GET mykey
"Hello from script"

获取服务器信息:

“`bash
redis-cli INFO

Server

redis_version:6.2.6
redis_git_sha1:00000000

“`

适用场景:

  • 在脚本中执行 Redis 命令。
  • 快速获取 Redis 状态或某个键的值。
  • 自动化管理任务。

注意事项:

  • 在这种模式下,redis-cli 执行完指定的命令后会立即退出。
  • 如果需要执行多个命令,可以考虑使用管道(见下一节)或编写更复杂的脚本。
  • 同样需要注意 -a 参数的安全问题。

10. 从文件读取命令或使用管道

对于需要执行一系列命令的场景,手动在交互模式下输入可能效率低下。redis-cli 支持从文件读取命令输入,或者通过管道接受命令列表。

10.1 从文件读取命令

可以使用输入重定向 < 将一个包含 Redis 命令的文件内容作为 redis-cli 的输入。

命令文件示例 (commands.txt):

redis
SET key1 "value1"
SET key2 "value2"
GET key1
GET key2
DEL key1 key2

命令格式:

bash
redis-cli [connection_options] < <commands_file>

示例:

执行 commands.txt 中的命令:

bash
redis-cli < commands.txt

或者连接到远程服务器执行文件中的命令:

bash
redis-cli -h 192.168.1.100 -p 6379 -a mypassword < commands.txt

输出将是文件中每个命令执行的结果,按顺序显示。

10.2 通过管道传递命令

可以使用管道 | 将其他命令(如 echocat)的输出作为 redis-cli 的输入。

命令格式:

bash
echo "<command1>\n<command2>\n..." | redis-cli [connection_options]

或者

bash
cat <commands_file> | redis-cli [connection_options]

示例:

通过管道执行简单命令:

bash
echo "PING" | redis-cli
PONG

通过管道执行多个命令:

bash
echo -e "SET mykey \"Hello from pipe\"\nGET mykey" | redis-cli
OK
"Hello from pipe"

(注意:-e 参数用于解释 \n 换行符)

适用场景:

  • 执行批量 Redis 命令。
  • 自动化部署或配置 Redis 数据。
  • 与其他命令行工具结合,处理和传递数据给 Redis。

注意事项:

  • 文件中或管道中的每个命令应该写在一行。
  • 这种方式下,如果某个命令失败,后续命令可能会继续执行,具体行为取决于错误类型。如果需要严格的错误检查和处理,可能需要更复杂的脚本逻辑。

11. 其他有用的连接模式和参数

redis-cli 还提供了一些特殊的模式或参数,虽然不是直接的连接方法,但与连接后的交互紧密相关,值得了解。

  • --latency: 检查并报告客户端与服务器之间的网络延迟。连接成功后,它会周期性地发送 PING 命令并测量响应时间。
    bash
    redis-cli --latency -h 192.168.1.100 -p 6379
    min: 0ms, max: 1ms, avg: 0ms.
    ...
  • --stat: 连接到服务器并实时显示服务器的统计信息,如内存使用、客户端连接数、每秒命令执行次数等。
    bash
    redis-cli --stat -h 192.168.1.100 -p 6379
    ------- summary -------
    ...
  • --scan: 使用 SCAN 命令迭代数据库中的 key,可以结合 MATCHCOUNT 参数。
    bash
    redis-cli --scan --pattern "user:*" -h 192.168.1.100 -p 6379
    user:1
    user:10
    ...

这些模式通过特定的参数在连接后进入特殊的工作状态,用于监控、扫描等目的。它们通常也支持前面提到的连接参数 (-h, -p, -a, --tls, -s, --uri 等)。

12. 故障排除:常见的连接问题

在使用 redis-cli 连接 Redis 时,可能会遇到各种问题。以下是一些常见的问题及其排查思路:

  • Could not connect to Redis at 127.0.0.1:6379: Connection refused:
    • 原因: Redis 服务器没有运行,或者没有监听在 127.0.0.1:6379
    • 排查:
      • 检查 Redis 服务器进程是否在运行:ps aux | grep redis
      • 检查 Redis 服务器是否监听在预期的地址和端口:netstat -tulnp | grep 6379 (将 6379 替换为实际端口)。
      • 检查 Redis 配置文件 (redis.conf) 中的 bindport 设置。
      • 如果使用 Unix Socket,检查 Socket 文件是否存在且路径正确,以及文件权限是否允许访问。
  • Could not connect to Redis at <remote_ip>:<port>: Connection timed outNo route to host:
    • 原因: 网络问题,客户端无法到达服务器。
    • 排查:
      • 检查服务器 IP 地址和端口是否正确。
      • 使用 ping <remote_ip> 检查网络连通性。
      • 检查服务器端的防火墙(如 iptables, firewalld, 安全组等)是否允许客户端 IP 或 IP 范围访问 Redis 端口。
      • 检查客户端机器的防火墙是否阻止了出站连接。
      • 检查中间网络设备(路由器、交换机)的配置。
  • (error) NOAUTH Authentication required.:
    • 原因: 服务器需要密码认证,但客户端没有提供或提供的密码不正确。
    • 排查:
      • 确认 Redis 服务器配置了 requirepass
      • 使用 redis-cli -a <password> 或在交互模式下使用 AUTH <password> 提供正确的密码。
      • 如果使用 ACL,确认服务器配置了用户,并使用 --username <username> --password <password> 或 URI 格式提供正确的用户名和密码。
  • (error) WRONGPASS invalid password:
    • 原因: 提供的密码错误。
    • 排查:
      • 仔细检查输入的密码是否与服务器 requirepass 配置一致。注意区分大小写。
      • 如果使用 -a 参数,检查命令行输入是否正确。
      • 如果密码来自文件或变量,检查读取过程是否正确。
  • TLS/SSL 连接问题:
    • 原因: 证书配置错误、CA 不受信任、TLS 版本或密码套件不兼容、TLS hostname 不匹配等。
    • 排查:
      • 检查服务器端 TLS 配置是否正确。
      • 确保客户端使用的 --cacert 文件是正确的 CA 证书或自签名证书。
      • 如果需要客户端证书,确认 --cert--key 文件正确且匹配。
      • 检查 --tls-hostname 是否正确匹配服务器证书。
      • 临时使用 --insecure (仅限测试!) 排除证书验证问题,但这会降低安全性。
      • 查看 Redis 服务器日志,通常会有详细的 TLS 握手错误信息。

13. 总结与最佳实践

掌握 redis-cli 的各种连接方法是高效使用和管理 Redis 的基础。从简单的本地连接到复杂的集群和安全连接,redis-cli 提供了丰富且灵活的选项来适应不同的部署场景。

在选择连接方式时,请考虑以下最佳实践:

  • 本地连接: 优先考虑 Unix Domain Socket (-s),它提供了更好的性能和基于文件系统权限的安全性。
  • 远程连接: 始终指定主机 (-h) 和端口 (-p)。
  • 安全性:
    • 为 Redis 服务器设置强密码 (requirepass) 或使用 ACL。
    • 绝对避免在命令行中直接使用 -a <password> 参数,因为它会将密码暴露在命令历史记录和进程列表中。对于交互式会话,使用连接后执行 AUTH <password>。对于自动化脚本,考虑从文件或安全存储中读取密码,或者使用支持更安全认证方式的客户端库。
    • 在不受信任的网络中,务必使用 TLS/SSL (--tls) 加密连接。
    • 配置防火墙规则,限制只有受信任的客户端 IP 地址才能访问 Redis 端口。
  • 集群: 连接 Redis Cluster 时,始终使用 -c 参数。
  • 自动化: 利用非交互模式、文件重定向或管道来批量执行命令,提高效率。

通过理解和实践本文介绍的各种连接方法,您将能够自信地使用 redis-cli 连接到各种 Redis 环境,进行数据操作、服务器监控和故障排查,从而更好地利用 Redis 强大的功能。希望这份详尽的指南能助您一臂之力!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部