Redis CLI 深入指南:命令、技巧与实战 – wiki大全

I apologize for the repeated issues. My available tools do not include direct file writing capabilities. Therefore, I cannot create the markdown file on your system.

However, I can still provide you with the content of the article. Here is the full article:

Redis CLI 深入指南:命令、技巧与实战

Redis (Remote Dictionary Server) 是一个开源的内存数据结构存储,可用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis 以其高性能、灵活性和丰富的功能集而闻名,是现代应用程序开发中不可或缺的工具。

与 Redis 交互的主要方式之一是通过其命令行接口(CLI)。Redis CLI 提供了一个简单而强大的界面,用于执行命令、管理数据和监控服务器。本文将深入探讨 Redis CLI 的常用命令、实用技巧以及在实际应用中的实战经验。

一、Redis CLI 基础

Redis CLI 是一个轻量级的工具,通常在安装 Redis 后即可使用。要启动 CLI,只需在终端中输入 redis-cli

连接到 Redis 服务器

默认情况下,redis-cli 会尝试连接到本地主机(127.0.0.1)上的默认端口(6379)。

bash
redis-cli

如果 Redis 服务器运行在不同的主机或端口上,可以使用 -h-p 选项指定:

bash
redis-cli -h your_redis_host -p 6380

如果 Redis 服务器需要密码认证,可以使用 -a 选项:

bash
redis-cli -a your_password

或者在连接后使用 AUTH 命令:

bash
AUTH your_password

基本交互

连接成功后,您会看到一个提示符(通常是 host:port>),表示您可以开始输入 Redis 命令了。

127.0.0.1:6379>

要退出 CLI,可以输入 quit 或使用 Ctrl+C

二、常用 Redis CLI 命令

Redis CLI 提供了大量命令来操作各种数据结构。以下是一些最常用和重要的命令分类。

1. 键 (Keys) 命令

键是 Redis 中存储数据的基本单位。

  • SET key value: 设置指定键的值。如果键已存在,其值将被覆盖。
    SET mykey "Hello Redis"
  • GET key: 获取指定键的值。
    GET mykey
  • DEL key [key ...]: 删除一个或多个键。
    DEL mykey anotherkey
  • EXISTS key: 检查键是否存在。
    EXISTS mykey
  • TTL key: 返回键的剩余生存时间(Time To Live),以秒为单位。-1 表示永不失效,-2 表示键不存在。
    TTL mykey
  • EXPIRE key seconds: 设置键的生存时间。
    EXPIRE mykey 60 # mykey 将在60秒后过期
  • KEYS pattern: 查找所有符合给定模式的键。注意:在生产环境中谨慎使用,因为它可能阻塞服务器。
    KEYS user:*
  • TYPE key: 返回键存储的数据类型。
    TYPE mykey

2. 字符串 (Strings) 命令

Redis 字符串是二进制安全的,可以包含任何类型的数据(例如 JPEG 图像、序列化的 Ruby 对象或文本)。

  • INCR key: 将键存储的数字值增一。
    INCR counter
  • DECR key: 将键存储的数字值减一。
    DECR counter
  • APPEND key value: 如果键已存在,将值追加到键的末尾。如果键不存在,则创建键并设置其值。
    APPEND mykey " World"
  • STRLEN key: 获取键所存储字符串的长度。
    STRLEN mykey

3. 哈希 (Hashes) 命令

哈希是字段和值之间的映射。非常适合存储对象。

  • HSET key field value [field value ...]: 设置哈希表中一个或多个字段的值。
    HSET user:1 name "Alice" age 30 city "New York"
  • HGET key field: 获取哈希表中指定字段的值。
    HGET user:1 name
  • HGETALL key: 获取哈希表中所有字段和值。
    HGETALL user:1
  • HDEL key field [field ...]: 删除哈希表中一个或多个字段。
    HDEL user:1 age
  • HEXISTS key field: 检查哈希表中是否存在指定字段。
    HEXISTS user:1 name

4. 列表 (Lists) 命令

列表是一个字符串列表,按照插入顺序排列。可以从列表的头部或尾部添加/删除元素。

  • LPUSH key value [value ...]: 将一个或多个值插入到列表的头部。
    LPUSH mylist "item1" "item2"
  • RPUSH key value [value ...]: 将一个或多个值插入到列表的尾部。
    RPUSH mylist "item3"
  • LPOP key: 移除并返回列表的第一个元素。
    LPOP mylist
  • RPOP key: 移除并返回列表的最后一个元素。
    RPOP mylist
  • LRANGE key start stop: 获取列表中指定范围内的元素。
    LRANGE mylist 0 -1 # 获取所有元素
  • LLEN key: 获取列表的长度。
    LLEN mylist

5. 集合 (Sets) 命令

集合是字符串的无序唯一集合。

  • SADD key member [member ...]: 将一个或多个成员添加到集合中。
    SADD myset "apple" "banana" "orange"
  • SMEMBERS key: 返回集合中的所有成员。
    SMEMBERS myset
  • SISMEMBER key member: 检查成员是否存在于集合中。
    SISMEMBER myset "apple"
  • SREM key member [member ...]: 从集合中移除一个或多个成员。
    SREM myset "banana"
  • SCARD key: 获取集合的成员数量。
    SCARD myset
  • SINTER key [key ...]: 返回给定所有集合的交集。
    SADD set1 "a" "b" "c"
    SADD set2 "b" "c" "d"
    SINTER set1 set2

6. 有序集合 (Sorted Sets) 命令

有序集合是字符串成员的集合,每个成员都与一个分数(score)关联,通过分数进行排序。成员是唯一的,但分数可以重复。

  • ZADD key score member [score member ...]: 将一个或多个成员及其分数添加到有序集合中。
    ZADD myzset 100 "Alice" 90 "Bob" 80 "Charlie"
  • ZRANGE key start stop [WITHSCORES]: 返回有序集合中指定索引范围内的成员。
    ZRANGE myzset 0 -1 WITHSCORES
  • ZSCORE key member: 返回有序集合中成员的分数。
    ZSCORE myzset "Alice"
  • ZREM key member [member ...]: 从有序集合中移除一个或多个成员。
    ZREM myzset "Bob"
  • ZCARD key: 获取有序集合的成员数量。
    ZCARD myzset

三、Redis CLI 实用技巧

除了基本的命令,Redis CLI 还提供了一些功能和技巧,可以提升您的使用体验和效率。

1. 命令自动补全

redis-cli 中,按下 Tab 键可以实现命令的自动补全,这对于不熟悉所有命令的用户来说非常方便。

127.0.0.1:6379> ZADD myzset 100 "Alice"
(integer) 1
127.0.0.1:6379> ZRA<Tab> # 会自动补全为 ZRANGE
127.0.0.1:6379> ZRANGE

2. 多行命令输入

有时您可能需要输入较长的命令或在一行中输入多个命令。Redis CLI 支持管道(Pipelining)模式。

要进入管道模式,可以启动 redis-cli 时使用 --pipe 选项,然后将命令通过标准输入传递。但这通常用于脚本化操作。

在交互模式下,如果一行命令太长,可以直接输入,Redis CLI 会自动处理。

3. 监控模式

MONITOR 命令可以实时打印 Redis 服务器接收到的所有命令,这对于调试和了解服务器活动非常有用。

MONITOR

输出示例:
1678886400.123456 [0 127.0.0.1:56789] "GET" "mykey"
1678886400.234567 [0 127.0.0.1:56790] "SET" "anotherkey" "value"

注意:在生产环境中,MONITOR 命令会消耗大量资源,应谨慎使用。

4. 慢查询日志

SLOWLOG GET [count] 命令用于获取 Redis 的慢查询日志。慢查询是指执行时间超过指定阈值(slowlog-log-slower-than 配置项,默认为 10 毫秒)的命令。

SLOWLOG GET 10 # 获取最近10条慢查询

这对于识别性能瓶颈非常有帮助。

5. INFO 命令

INFO 命令用于获取 Redis 服务器的各种信息和统计数据,包括服务器、客户端、内存、持久化、复制、CPU 等。

INFO

您可以指定参数来获取特定部分的信息:

INFO MEMORY
INFO CLIENTS

6. CONFIG 命令

CONFIG GET parameter 命令用于获取 Redis 服务器的配置参数。CONFIG SET parameter value 用于修改配置参数(某些参数可能需要重启才能生效)。

CONFIG GET maxmemory
CONFIG SET maxmemory 1gb

7. SCAN 命令 (替代 KEYS)

由于 KEYS 命令在大型生产环境中可能导致服务器阻塞,Redis 提供了 SCAN 命令及其变体 (HSCAN, SSCAN, ZSCAN) 来迭代数据库中的键,而不会阻塞服务器。

SCAN 命令通过游标(cursor)迭代,每次返回一部分键。

SCAN 0 MATCH user:* COUNT 100

0 是初始游标,每次命令执行后会返回新的游标。当返回的游标是 0 时,表示迭代完成。

8. PING 命令

PING 命令用于检查 Redis 服务器是否正在运行,通常返回 PONG

PING

四、Redis CLI 实战应用

Redis CLI 不仅仅是一个学习工具,它在日常开发和运维中也扮演着重要角色。

1. 缓存管理

  • 手动清除缓存:当应用程序数据更新,需要强制刷新缓存时,可以使用 DEL 命令删除特定缓存键。
    DEL cache:user:123
  • 查看缓存状态:使用 INFO MEMORYINFO STATS 命令监控缓存使用情况,判断是否需要调整缓存策略或扩展 Redis 实例。
  • 设置过期时间:通过 EXPIRE 命令为键设置合适的过期时间,可以有效管理内存,避免脏数据。

2. 实时计数器和排行榜

  • 实现页面访问计数器
    INCR page:views:homepage
  • 实现点赞/投票功能
    SADD article:123:likes user:456 # 用户点赞
    SCARD article:123:likes # 查看点赞数
  • 实现实时排行榜:利用有序集合 (ZADD, ZRANGE) 可以轻松实现高分榜、热门商品榜等功能。
    ZADD leaderboard 100 "playerA"
    ZADD leaderboard 150 "playerB"
    ZADD leaderboard 80 "playerC"
    ZRANGE leaderboard 0 -1 WITHSCORES DESC # 获取降序排行榜

3. 发布/订阅系统

Redis 的发布/订阅(Pub/Sub)功能允许客户端订阅特定频道,并接收发布到这些频道的消息。

  • 订阅频道:在一个 CLI 窗口中:
    SUBSCRIBE chat_channel
  • 发布消息:在另一个 CLI 窗口中:
    PUBLISH chat_channel "Hello, everyone!"
    订阅者会立即收到消息。

4. 任务队列

虽然 Redis 并非专业的队列服务,但其列表 (LPUSH/RPUSH, LPOP/RPOP) 可以实现简单的任务队列。

  • 生产者 (Pusher)
    LPUSH task_queue "process_image:123"
  • 消费者 (Worker)
    BRPOP task_queue 0 # 阻塞式弹出,0表示永远等待

5. 数据结构操作和调试

  • 检查数据类型:当不确定某个键存储的数据类型时,TYPE 命令非常有用。
  • 批量操作:虽然 MGETMSET 可以用于批量字符串操作,但对于不同类型的批量操作,可以使用 Lua 脚本结合 EVAL 命令来保证原子性。
  • 备份和恢复SAVE 命令可以同步保存数据到磁盘(会阻塞),BGSAVE 命令可以异步保存。虽然通常通过配置 Redis 自动 RDB/AOF 持久化,但了解这些命令在特定场景下有帮助。

五、注意事项与最佳实践

  • 谨慎使用 KEYS 命令:如前所述,KEYS 命令在生产环境中可能导致性能问题。请使用 SCAN 命令代替。
  • 合理设置键的过期时间:避免内存无限增长,及时清理不再需要的数据。
  • 避免大键 (Big Keys):存储非常大的字符串、列表、哈希等可能会导致性能问题和内存碎片。尽量将大键拆分为小键。
  • 使用合适的 Redis 数据结构:根据数据的特点和访问模式选择最合适的数据结构,可以显著提高效率。
  • 监控 Redis 性能:定期使用 INFO 命令检查 Redis 实例的健康状况和性能指标。结合 SLOWLOG 发现并优化慢查询。
  • 安全性:为 Redis 实例设置密码,并限制只有受信任的 IP 地址才能访问。避免将 Redis 端口直接暴露在公网上。

总结

Redis CLI 是一个功能强大、直观且高效的工具,是 Redis 生态系统不可或缺的一部分。掌握其核心命令、运用实用技巧并在实际场景中进行实战,将极大地提升您使用 Redis 的效率和能力。无论是进行数据探索、调试问题、管理缓存还是构建高性能应用,Redis CLI 都是您可靠的伙伴。深入理解并熟练运用它,将使您在数据存储和处理方面更加得心应手。

滚动至顶部