Redis 的命令设计具有很强的规律性,通常以数据类型的首字母作为命令的前缀(例如:哈希 H列表 L/R集合 S有序集合 Z)。


0. redis-cli 客户端常用启动参数(新增章节)

日常使用 redis-cli 连接 Redis 服务时,默认情况下查询中文 value 会显示十六进制转义编码,可读性极差,可以通过启动参数优化连接体验。

核心参数说明

  1. 基础连接认证
# 密码认证连接 Redis
redis-cli -a 123456

⚠️ 安全提示:命令行明文携带密码会被历史命令记录,生产优先使用登录后执行 AUTH 123456

  1. --raw 参数:正常输出中文(重点)
redis-cli -a 123456 --raw
  • 作用:关闭 Redis 默认的协议转义输出,直接原样打印字符串,中文不会显示 \xe4\xb8\xad\xe6\x96\x87 这类十六进制
  • 对比效果:
    不加 --raw
    127.0.0.1:6379> GET name
    "\xe5\xb0\x8f\xe6\x98\x8e"
    
    加上 --raw
    127.0.0.1:6379> GET name
    小明
    
  1. 常用组合示例
# 指定IP端口密码,开启原始输出支持中文
redis-cli -h 127.0.0.1 -p 6379 -a 123456 --raw

# 无交互,直接执行一条命令并退出(shell脚本常用)
redis-cli --raw GET user:100:name

补充:--raw 不仅解决中文展示问题,导出数据脚本抓取返回结果时也推荐加上,避免编码干扰业务处理。


1. 通用键(Key)操作命令

这些命令适用于所有数据类型,主要用于键的管理过期时间控制和检索。

命令 语法 说明 示例
DEL DEL key [key ...] 删除一个或多个键。 DEL user_1
EXISTS EXISTS key [key ...] 检查给定的键是否存在。 EXISTS user_1
EXPIRE EXPIRE key seconds 设置键的生存时间(秒)。 EXPIRE user_1 3600
TTL TTL key 获取键的剩余生存时间(秒)。-1 表示永久,-2 表示不存在。 TTL user_1
TYPE TYPE key 返回键所储存的值的类型。 TYPE user_1
KEYS KEYS pattern 查找所有符合模式的键(生产环境慎用,易阻塞)。 KEYS user_*
SCAN SCAN cursor [MATCH pattern] [COUNT count] 渐进式遍历键(更安全,推荐替代 KEYS)。 SCAN 0 MATCH user_* COUNT 10

2. 字符串(String)命令

String 是 Redis 最基础的数据类型,常用于缓存计数器和分布式锁。

命令 语法 说明 示例
SET SET key value [EX seconds] [NX|XX] 设置键值对。NX 表示键不存在时才设置,XX 表示键存在时才设置。 SET name "yys" EX 60 NX
GET GET key 获取指定键的值。 GET name
MSET MSET key value [key value ...] 同时设置多个键值。 MSET k1 "v1" k2 "v2"
MGET MGET key [key ...] 同时获取多个键的值。 MGET k1 k2
INCR INCR key 将键储存的数字值加 1(常用于计数器)。 INCR visitor_count
DECR DECR key 将键储存的数字值减 1。 DECR stock_count
INCRBY INCRBY key increment 将键储存的数字值增加指定的增量。 INCRBY points 100

3. 哈希(Hash)命令

Hash 适合用于存储对象(如用户信息),它在内存占用和检索效率上比将对象序列化为 String 更有优势。

命令 语法 说明 示例
HSET HSET key field value [field value ...] 设置哈希表中指定字段的值。 HSET user:100 name "Alice" age 25
HGET HGET key field 获取哈希表中指定字段的值。 HGET user:100 name
HGETALL HGETALL key 获取哈希表中的所有字段和值。 HGETALL user:100
HDEL HDEL key field [field ...] 删除哈希表中的一个或多个字段。 HDEL user:100 age
HEXISTS HEXISTS key field 查看哈希表中指定的字段是否存在。 HEXISTS user:100 name
HKEYS HKEYS key 获取哈希表中的所有字段名(field)。 HKEYS user:100
HVALS HVALS key 获取哈希表中的所有值(value)。 HVALS user:100

💡 实操提示:查询 Hash 内中文内容时,务必使用 redis-cli --raw 登录,否则中文字段/内容会显示转义字符。


4. 列表(List)命令

List 是双向链表,常用于构建消息队列最新消息排行等。

命令 语法 说明 示例
LPUSH LPUSH key element [element ...] 将一个或多个值插入到列表头部(左侧)。 LPUSH tasks "task1"
RPUSH RPUSH key element [element ...] 将一个或多个值插入到列表尾部(右侧)。 RPUSH tasks "task2"
LPOP LPOP key 移出并获取列表的第一个元素(左侧)。 LPOP tasks
RPOP RPOP key 移出并获取列表的最后一个元素(右侧)。 RPOP tasks
LRANGE LRANGE key start stop 获取列表指定区间内的元素。0 -1 表示获取全部。 LRANGE tasks 0 -1
LLEN LLEN key 获取列表长度。 LLEN tasks

5. 集合(Set)命令

Set 是无序不重复集合,常用于去重(如统计独立 IP)以及求交集并集和差集(如社交关系的共同关注)。

命令 语法 说明 示例
SADD SADD key member [member ...] 向集合添加一个或多个成员。 SADD tags "Go" "Redis"
SREM SREM key member [member ...] 移除集合中的一个或多个成员。 SREM tags "Redis"
SISMEMBER SISMEMBER key member 判断成员元素是否是集合的成员。 SISMEMBER tags "Go"
SMEMBERS SMEMBERS key 返回集合中的所有成员。 SMEMBERS tags
SCARD SCARD key 获取集合的成员数。 SCARD tags
SINTER SINTER key [key ...] 返回给定所有集合的交集。 SINTER set1 set2
SUNION SUNION key [key ...] 返回给定所有集合的并集。 SUNION set1 set2

6. 有序集合(Sorted Set / Zset)命令

Zset 类似于 Set,但每个成员都会关联一个 score(分数值),Redis 会按照分数从小到大排序。常用于排行榜带权重的任务队列。

命令 语法 说明 示例
ZADD ZADD key score member [score member ...] 向有序集合添加一个或多个成员,或更新分数。 ZADD rank 100 "userA" 95 "userB"
ZRANGE ZRANGE key start stop [WITHSCORES] 返回指定区间内的成员。可通过 WITHSCORES 附带分数。 ZRANGE rank 0 -1 WITHSCORES
ZREVRANGE ZREVRANGE key start stop [WITHSCORES] 返回指定区间内的成员,按分数从大到小排列。 ZREVRANGE rank 0 2
ZREM ZREM key member [member ...] 移除有序集合中的一个或多个成员。 ZREM rank "userB"
ZSCORE ZSCORE key member 返回有序集中,成员的分数值。 ZSCORE rank "userA"
ZCARD ZCARD key 获取有序集合的成员数。 ZCARD rank

7. 连接与服务器管理命令

这些命令用于管理 Redis 连接数据库切换性能监控以及数据清理。

命令 语法 说明 示例
PING PING [message] 测试与 Redis 服务器的连接是否存活。 PING (返回 PONG
SELECT SELECT index 切换到指定的数据库(默认 0-15)。 SELECT 1
FLUSHDB FLUSHDB [ASYNC] 清空当前数据库中的所有键(慎用)。 FLUSHDB
FLUSHALL FLUSHALL [ASYNC] 清空所有数据库中的所有键(极度慎用)。 FLUSHALL
DBSIZE DBSIZE 返回当前数据库的 key 数量。 DBSIZE
INFO INFO [section] 获取 Redis 服务器的各种运行状态和统计信息。 INFO memory

8. 事务与 Lua 脚本命令

Redis 的事务通过队列机制保证命令的顺序执行而 Lua 脚本则可以实现多命令的原子性操作。

命令 语法 说明 示例
MULTI MULTI 标记一个事务块的开始。 MULTI
EXEC EXEC 执行所有事务块内的命令。 EXEC
DISCARD DISCARD 取消事务,放弃执行事务块内的所有命令。 DISCARD
WATCH WATCH key [key ...] 监视一个或多个键。如果这些键在事务执行前被修改,事务将被打断(乐观锁)。 WATCH stock
EVAL EVAL script numkeys key [key ...] arg [arg ...] 在 Redis 服务器中执行 Lua 脚本(保证原子性)。 见下方说明

EVAL 命令示例

例如,要在 Redis 中运行 Lua 脚本来删除特定的 Key:

EVAL "return redis.call('del' KEYS[1])" 1 "my_temp_key"

9. 生产环境使用建议

  1. 优先使用 SCAN 代替 KEYS:在存有大量数据的生产环境中,使用 KEYS * 会导致 Redis 线程被长时间阻塞。推荐使用 SCAN 分批迭代获取键名。
  2. 务必设置 TTL:除了持久化配置数据外,临时性的缓存数据锁信息任务标记都应通过 EXPIRE 设定合理的过期时间,防止内存被无用数据耗尽。
  3. 注意 BigKey 风险:单个 ListHashSetZset 包含数十万甚至数百万元素时,执行类似 HGETALLLRANGE 0 -1 的命令会产生明显的网络与 CPU 瓶颈。应尽量进行分片或分批读取。
  4. 客户端查询中文规范:日常运维排查数据,统一使用 redis-cli --raw 进入终端,避免中文转义字符干扰排查Shell 脚本抓取中文结果同样追加 --raw 参数。
  5. 密码安全规范:尽量避免长期使用 redis-cli -a xxx 明文密码登录交互式终端,防止账号泄露风险。

如果你需要,我可以再单独整理一份 redis-cli 完整高频参数清单 追加到文档末尾。