Redis-cli:连接Redis服务器的必备工具

Redis-cli:连接 Redis 服务器的必备工具

Redis-cli 是 Redis 官方提供的命令行界面(Command Line Interface,CLI)工具,它是与 Redis 服务器进行交互的主要方式之一。无论是开发者、运维工程师还是数据库管理员,都需要熟练掌握 Redis-cli 的使用,以便高效地管理和操作 Redis 数据。本文将深入探讨 Redis-cli 的各个方面,包括其基本用法、连接选项、常用命令、数据操作、脚本执行、集群管理、安全性、监控与调试,以及一些高级技巧和最佳实践。

一、Redis-cli 的基本用法

Redis-cli 的基本用法非常简单,通常只需要在终端或命令行窗口中输入 redis-cli 命令即可启动。默认情况下,它会尝试连接到本地主机(127.0.0.1localhost)上的 Redis 服务器,默认端口为 6379

bash
redis-cli

如果 Redis 服务器运行在不同的主机或端口上,或者需要使用密码进行身份验证,则需要使用相应的选项来指定连接参数。

1.1 连接选项

Redis-cli 提供了丰富的连接选项,允许用户自定义连接参数,以适应不同的 Redis 服务器配置。以下是一些常用的连接选项:

  • -h <hostname>:指定 Redis 服务器的主机名或 IP 地址。默认值为 127.0.0.1
  • -p <port>:指定 Redis 服务器的端口号。默认值为 6379
  • -s <socket>:指定 Redis 服务器的 Unix 套接字路径。如果指定了此选项,则会忽略 -h-p 选项。
  • -a <password>:指定 Redis 服务器的密码。如果 Redis 服务器启用了密码认证,则必须提供此选项。为了安全起见,建议不要在命令行中直接输入明文密码,而是使用 --askpass 选项让 Redis-cli 提示输入密码。
  • --askpass:提示用户输入密码,而不是在命令行中明文输入。
  • -u <uri>: 使用Redis URI方案连接到Redis服务器。
  • -n <db>:指定要连接的 Redis 数据库编号。Redis 支持多个数据库,默认数据库编号为 0
  • --raw:以原始格式显示结果,不进行任何转义或格式化。这对于处理二进制数据或特殊字符非常有用。
  • --no-raw:以可读格式显示结果,对特殊字符进行转义。这是默认行为。
  • --rdb <filename>: 创建Redis RDB文件的副本。
  • --pipe: 将命令从标准输入发送到Redis服务器。
  • --pipe-timeout <timeout>: 设置 —pipe 模式下的超时时间(秒)。
  • --bigkeys: 扫描Redis数据库中的大键。
  • --scan: 使用 SCAN 命令扫描Redis数据库中的键。
  • --pattern <pattern>:配合 --scan 选项使用,指定要扫描的键的模式。
  • --intrinsic-latency <seconds>:运行一个内在延迟检查程序,持续指定的秒数。
  • --eval <script>:执行 Lua 脚本。
  • --ldb: 与 --eval 结合使用,启用 Lua 调试器.
  • --ldb-sync-mode: 与 --ldb 结合使用,启用同步模式的 Lua 调试器。
  • --cluster: 启用 Redis 集群模式。
  • --cluster-only: 仅执行指定的集群命令。
  • -c:启用集群模式的自动重定向功能。当 Redis 集群中的节点发生故障转移或数据迁移时,Redis-cli 会自动重定向到正确的节点。
  • --verbose:显示更详细的输出信息。

1.2 示例

以下是一些使用 Redis-cli 连接选项的示例:

  • 连接到本地主机,默认端口:

    bash
    redis-cli

  • 连接到指定主机和端口:

    bash
    redis-cli -h 192.168.1.100 -p 6380

  • 连接到指定主机和端口,并使用密码认证:

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

  • 连接到指定主机和端口,并使用密码认证(提示输入密码):

    bash
    redis-cli -h 192.168.1.100 -p 6380 --askpass

    * 使用Redis URI连接到Redis服务器:
    bash
    redis-cli -u redis://<username>:<password>@<host>:<port>/<db>

  • 连接到指定的 Unix 套接字:

    bash
    redis-cli -s /tmp/redis.sock

  • 连接到指定的数据库编号:

    bash
    redis-cli -n 2

二、常用命令

连接到 Redis 服务器后,就可以使用 Redis-cli 执行各种 Redis 命令了。Redis 提供了丰富的命令集,用于操作各种数据结构,如字符串、哈希、列表、集合、有序集合等。以下是一些常用的 Redis 命令:

2.1 键(Key)操作

  • SET key value:设置键值对。
  • GET key:获取键对应的值。
  • DEL key [key ...]:删除一个或多个键。
  • EXISTS key [key ...]:检查一个或多个键是否存在。
  • EXPIRE key seconds:设置键的过期时间(秒)。
  • TTL key:获取键的剩余生存时间(秒)。
  • KEYS pattern:查找所有符合给定模式的键。
  • TYPE key:获取键对应的值的类型。
  • RENAME key newkey:重命名键。
  • RENAMENX key newkey:仅当新键名不存在时,才重命名键。
  • RANDOMKEY:随机返回一个键。
  • SCAN cursor [MATCH pattern] [COUNT count]:迭代数据库中的键。

2.2 字符串(String)操作

  • APPEND key value:将值追加到键的末尾。
  • STRLEN key:获取键对应的值的长度。
  • GETRANGE key start end:获取键对应的值的子字符串。
  • SETRANGE key offset value:从指定偏移量开始,覆盖键对应的值的一部分。
  • INCR key:将键对应的值递增 1。
  • INCRBY key increment:将键对应的值递增指定的整数。
  • DECR key:将键对应的值递减 1。
  • DECRBY key decrement:将键对应的值递减指定的整数。

2.3 哈希(Hash)操作

  • HSET key field value:设置哈希表中字段的值。
  • HGET key field:获取哈希表中字段的值。
  • HMSET key field value [field value ...]:同时设置哈希表中多个字段的值。
  • HMGET key field [field ...]:获取哈希表中多个字段的值。
  • HGETALL key:获取哈希表中所有字段和值。
  • HDEL key field [field ...]:删除哈希表中一个或多个字段。
  • HEXISTS key field:检查哈希表中字段是否存在。
  • HLEN key:获取哈希表中字段的数量。
  • HKEYS key:获取哈希表中所有字段。
  • HVALS key:获取哈希表中所有值。
  • HINCRBY key field increment:将哈希表中字段的值递增指定的整数。

2.4 列表(List)操作

  • LPUSH key value [value ...]:将一个或多个值插入到列表头部。
  • RPUSH key value [value ...]:将一个或多个值插入到列表尾部。
  • LPOP key:移除并返回列表头部的元素。
  • RPOP key:移除并返回列表尾部的元素。
  • LINDEX key index:获取列表中指定索引位置的元素。
  • LLEN key:获取列表的长度。
  • LRANGE key start stop:获取列表中指定范围内的元素。
  • LREM key count value:从列表中移除指定数量的元素。
  • LTRIM key start stop:修剪列表,只保留指定范围内的元素。

2.5 集合(Set)操作

  • SADD key member [member ...]:将一个或多个成员添加到集合中。
  • SMEMBERS key:获取集合中的所有成员。
  • SISMEMBER key member:检查成员是否在集合中。
  • SREM key member [member ...]:从集合中移除一个或多个成员。
  • SCARD key:获取集合中成员的数量。
  • SINTER key [key ...]:返回多个集合的交集。
  • SUNION key [key ...]:返回多个集合的并集。
  • SDIFF key [key ...]:返回多个集合的差集。
  • SPOP key [count]: 从集合中移除并返回一个或多个随机成员。

2.6 有序集合(Sorted Set)操作

  • ZADD key score member [score member ...]:将一个或多个成员添加到有序集合中,并指定分数。
  • ZRANGE key start stop [WITHSCORES]:获取有序集合中指定范围内的成员,可以选择是否返回分数。
  • ZREVRANGE key start stop [WITHSCORES]:获取有序集合中指定范围内(按分数从高到低排列)的成员,可以选择是否返回分数。
  • ZSCORE key member:获取有序集合中成员的分数。
  • ZRANK key member:获取有序集合中成员的排名(按分数从小到大排列)。
  • ZREVRANK key member:获取有序集合中成员的反向排名(按分数从大到小排列)。
  • ZREM key member [member ...]:从有序集合中移除一个或多个成员。
  • ZCARD key:获取有序集合中成员的数量。
  • ZCOUNT key min max:获取有序集合中分数在指定范围内的成员数量。
  • ZINCRBY key increment member:将有序集合中成员的分数递增指定的数值。
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]: 获取有序集合中分数在指定范围内的成员,可以选择是否返回分数,并可以进行分页。

三、数据操作

Redis-cli 不仅可以执行 Redis 命令,还可以进行一些数据操作,如批量操作、事务处理和管道操作。

3.1 批量操作

Redis-cli 支持使用 MSETMGET 等命令进行批量操作,可以一次性设置或获取多个键值对,减少网络开销,提高效率。

bash
redis-cli MSET key1 value1 key2 value2 key3 value3
redis-cli MGET key1 key2 key3

3.2 事务处理

Redis-cli 支持使用 MULTIEXECDISCARDWATCH 命令进行事务处理。事务可以将多个命令打包成一个原子操作,保证这些命令要么全部执行成功,要么全部不执行。

bash
redis-cli
MULTI
SET key1 value1
SET key2 value2
EXEC

3.3 管道操作

Redis-cli 支持使用管道(Pipeline)操作,可以将多个命令一次性发送给 Redis 服务器,减少网络往返次数,提高性能。可以使用 --pipe选项进入管道模式,从标准输入中发送命令。

bash
(echo -en "PING\r\nSET key1 value1\r\nGET key1\r\n"; sleep 1) | redis-cli --pipe

也可以在常规模式下,直接将多个命令用换行符\n连接后直接作为redis-cli的参数执行:
bash
redis-cli "SET key1 value1\nGET key1"

四、脚本执行

Redis-cli 支持使用 EVALEVALSHA 命令执行 Lua 脚本。Lua 脚本可以在 Redis 服务器端原子性地执行多个操作,避免了客户端与服务器之间的多次网络交互,提高了性能。还可以通过Lua脚本实现一些复杂的逻辑和自定义功能。

4.1 EVAL 命令

EVAL 命令可以直接执行 Lua 脚本代码。

bash
redis-cli EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 mykey myvalue

此命令的参数说明:
* "return redis.call('SET', KEYS[1], ARGV[1])": Lua脚本。
* 1: 脚本中key的数量。
* mykey: key列表中的第一个key,对应脚本中的KEYS[1]
* myvalue: value列表中的第一个value,对应脚本中的ARGV[1]

4.2 EVALSHA 命令

EVALSHA 命令可以执行预先加载到 Redis 服务器中的 Lua 脚本的 SHA1 校验和。使用 SCRIPT LOAD 命令可以将 Lua 脚本加载到 Redis 服务器,并返回脚本的 SHA1 校验和。

```bash
redis-cli SCRIPT LOAD "return redis.call('SET', KEYS[1], ARGV[1])"

返回 SHA1 校验和,例如:"e0e1f9fabfc9d4800c877a703b823ac0578fffe7"

redis-cli EVALSHA e0e1f9fabfc9d4800c877a703b823ac0578fffe7 1 mykey myvalue
```

4.3 脚本调试

Redis-cli 可以使用 --ldb--ldb-sync-mode 选项启用 Lua 调试器,以便调试 Lua 脚本。

五、集群管理

Redis-cli 支持连接和管理 Redis 集群。Redis 集群提供了数据分片、高可用性和自动故障转移等功能。

5.1 连接集群

可以使用 -c 选项连接到 Redis 集群,并启用集群模式的自动重定向功能。

bash
redis-cli -c -h <cluster_node_host> -p <cluster_node_port>

5.2 集群命令

Redis-cli 支持执行一些集群管理命令,如:

  • CLUSTER INFO:获取集群信息。
  • CLUSTER NODES:获取集群节点信息。
  • CLUSTER SLOTS:获取集群槽位分配信息。
  • CLUSTER KEYSLOT key:计算键所属的槽位。
  • CLUSTER MEET ip port:将节点添加到集群。
  • CLUSTER FORGET node_id:从集群中移除节点。
  • CLUSTER REPLICATE node_id:将节点设置为指定节点的副本。
  • CLUSTER FAILOVER: 手动故障转移。

六、安全性

Redis-cli 的安全性主要体现在以下几个方面:

6.1 密码认证

Redis-cli 支持使用 -a--askpass 选项进行密码认证,确保只有授权用户才能访问 Redis 服务器。建议在生产环境中启用密码认证,并使用强密码。

6.2 SSL/TLS 加密

Redis-cli 支持使用 SSL/TLS 加密连接,保护数据传输的安全性。要启用 SSL/TLS 加密,需要在 Redis 服务器端配置 SSL/TLS 证书,并在 Redis-cli 中使用 --tls 选项以及相关选项指定证书和密钥文件。

6.3 绑定 IP 地址

Redis 服务器可以配置为只监听特定的 IP 地址,限制客户端的访问来源。可以在 Redis 配置文件中设置 bind 指令来指定允许连接的 IP 地址。

七、监控与调试

Redis-cli 提供了一些命令和选项,用于监控 Redis 服务器的状态和性能,以及调试 Redis 相关问题。

7.1 INFO 命令

INFO 命令可以获取 Redis 服务器的各种信息,包括服务器状态、客户端连接、内存使用、持久化、复制、集群、CPU 使用等。

bash
redis-cli INFO

7.2 MONITOR 命令

MONITOR 命令可以实时监控 Redis 服务器接收到的所有命令请求。这对于调试和分析 Redis 客户端的行为非常有用。

bash
redis-cli MONITOR

7.3 SLOWLOG 命令

SLOWLOG 命令可以获取 Redis 服务器的慢查询日志。慢查询日志记录了执行时间超过指定阈值的命令。这对于发现和优化性能瓶颈非常有用。

bash
redis-cli SLOWLOG GET [count]

7.4 CLIENT 命令

CLIENT 命令可以获取和管理 Redis 客户端连接。

  • CLIENT LIST:获取客户端连接列表。
  • CLIENT KILL ip:port:关闭指定的客户端连接。
  • CLIENT SETNAME connection-name:设置客户端连接的名称。
  • CLIENT GETNAME: 获取当前连接的名称。

7.5 DEBUG 命令

DEBUG 命令用于调试。 它不应该在生产环境中使用。

  • DEBUG OBJECT key:查看内部调试信息。
  • DEBUG SEGFAULT:执行一个导致 Redis 服务崩溃的非法内存访问。

八、高级技巧和最佳实践

8.1 使用配置文件

可以将 Redis-cli 的常用选项和参数保存在配置文件中,避免每次都手动输入。可以使用 --config-file 选项指定配置文件。

8.2 使用别名

可以为 Redis-cli 命令创建别名,简化命令输入。例如,在 .bashrc.zshrc 文件中添加以下别名:

bash
alias redis="redis-cli -h 192.168.1.100 -p 6379 -a mypassword"

8.3 脚本化

可以将 Redis-cli 命令组合成脚本,实现自动化任务。例如,可以编写一个脚本来定期备份 Redis 数据、监控 Redis 服务器状态等。

8.4 使用第三方工具

除了 Redis-cli,还有一些第三方工具可以用于连接和管理 Redis 服务器,例如 Redis Desktop Manager、Medis 等。这些工具通常提供图形化界面,更易于使用和管理。

8.5 了解Redis内部结构

为了更好的使用Redis-cli,建议了解Redis的内部结构,例如数据类型、内存模型、持久化机制、复制、集群等。

总结

Redis-cli 是连接和管理 Redis 服务器的必备工具。本文详细介绍了 Redis-cli 的各个方面,包括其基本用法、连接选项、常用命令、数据操作、脚本执行、集群管理、安全性、监控与调试,以及一些高级技巧和最佳实践。熟练掌握 Redis-cli 的使用,可以帮助开发者、运维工程师和数据库管理员更高效地管理和操作 Redis 数据,充分发挥 Redis 的性能优势。

希望这篇文章对你有所帮助!

THE END