Redis 的命令设计具有很强的规律性,通常以数据类型的首字母作为命令的前缀(例如:哈希 H列表 L/R集合 S有序集合 Z)。
0. redis-cli 客户端常用启动参数(新增章节)
日常使用 redis-cli 连接 Redis 服务时,默认情况下查询中文 value 会显示十六进制转义编码,可读性极差,可以通过启动参数优化连接体验。
核心参数说明
- 基础连接认证
# 密码认证连接 Redis
redis-cli -a 123456
⚠️ 安全提示:命令行明文携带密码会被历史命令记录,生产优先使用登录后执行
AUTH 123456。
- --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"--raw127.0.0.1:6379> GET name 小明
- 常用组合示例
# 指定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. 生产环境使用建议
- 优先使用 SCAN 代替 KEYS:在存有大量数据的生产环境中,使用
KEYS *会导致 Redis 线程被长时间阻塞。推荐使用SCAN分批迭代获取键名。 - 务必设置 TTL:除了持久化配置数据外,临时性的缓存数据锁信息任务标记都应通过
EXPIRE设定合理的过期时间,防止内存被无用数据耗尽。 - 注意 BigKey 风险:单个 ListHashSetZset 包含数十万甚至数百万元素时,执行类似
HGETALL或LRANGE 0 -1的命令会产生明显的网络与 CPU 瓶颈。应尽量进行分片或分批读取。 - 客户端查询中文规范:日常运维排查数据,统一使用
redis-cli --raw进入终端,避免中文转义字符干扰排查Shell 脚本抓取中文结果同样追加--raw参数。 - 密码安全规范:尽量避免长期使用
redis-cli -a xxx明文密码登录交互式终端,防止账号泄露风险。
如果你需要,我可以再单独整理一份 redis-cli 完整高频参数清单 追加到文档末尾。
评论区(0 条)
发表评论⏳ 加载编辑器…