1. Redis核心命令全景解析
Redis作为当今最流行的内存数据库之一,其命令体系就像乐高积木一样,通过不同模块的组合可以构建出各种高性能解决方案。我整理了六年Redis运维中最常用的核心命令,这些命令覆盖了80%的日常使用场景,特别适合刚接触Redis的开发者快速上手。
注意:所有命令示例均基于Redis 6.2版本,部分命令在旧版本可能不支持或语法有差异
1.1 键空间操作命令
键(Key)是Redis数据组织的基本单位,这些命令能帮你高效管理键生命周期:
bash复制# 设置键值(默认永不过期)
SET user:1001 "{'name':'张三','age':28}"
# 带过期时间设置(30秒后自动删除)
SETEX cache:token 30 "a1b2c3d4"
# 批量获取键值(减少网络开销)
MGET user:1001 user:1002 user:1003
# 模糊查询键(支持*和?通配符)
KEYS order:2023-*
# 查看键剩余生存时间
TTL user:1001
# 原子性删除(返回删除成功的数量)
DEL user:1001 cache:token
避坑指南:
- KEYS命令在生产环境慎用,它会阻塞Redis单线程,推荐用SCAN命令替代
- DEL删除大对象可能导致短暂延迟,UNLINK命令是异步删除的更好选择
- 键命名建议使用冒号分隔的层级结构(如
业务:类型:ID)
1.2 五大数据类型实战命令
1.2.1 字符串(String)
字符串是Redis最基础的类型,除了存文本还能存序列化对象和数字:
bash复制# 计数器场景(原子性增减)
INCR article:1001:views
DECRBY inventory:itemA 5
# 位图操作(适合签到场景)
SETBIT sign:202305:user1001 15 1
BITCOUNT sign:202305:user1001
# 字符串追加
APPEND user:1001:bio " 高级工程师"
1.2.2 哈希(Hash)
哈希适合存储对象属性,比字符串更节省内存:
bash复制# 用户属性存储
HSET user:1001 name "李四" age 30 email "lisi@example.com"
# 批量设置字段
HMSET product:1002 title "Redis手册" price 59.9 stock 100
# 获取指定字段
HGET user:1001 name
# 获取所有字段和值
HGETALL user:1001
# 字段自增(不用先读后写)
HINCRBY user:1001 age 1
1.2.3 列表(List)
列表实现消息队列和最新动态展示:
bash复制# 消息队列场景
LPUSH orders:queue "{'orderId':1001,'time':1685432100}"
RPOP orders:queue
# 最新微博展示
LPUSH user:1001:timeline "今天天气真好!"
LRANGE user:1001:timeline 0 9
# 阻塞式弹出(适合工作队列)
BRPOP task:queue 30
1.2.4 集合(Set)
集合适合去重和关系运算:
bash复制# 用户标签系统
SADD user:1001:tags "科技" "编程" "Redis"
# 共同关注计算
SINTER user:1001:follows user:1002:follows
# 随机抽奖场景
SRANDMEMBER activity:lucky:users 3
1.2.5 有序集合(ZSet)
有序集合实现排行榜和延迟队列:
bash复制# 游戏排行榜
ZADD game:rank 3500 "playerA" 4200 "playerB"
# 获取TOP10
ZREVRANGE game:rank 0 9 WITHSCORES
# 范围查询(分数在3000-4000的玩家)
ZRANGEBYSCORE game:rank 3000 4000
1.3 事务与管道命令
Redis的事务不同于关系型数据库,实际是命令打包执行:
bash复制# 事务示例(MULTI+EXEC)
MULTI
SET order:1001:status "paid"
INCR user:1001:order_count
EXEC
# 管道技术(一次发送多个命令)
(echo -en "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379
性能对比实测:
- 普通模式:100次SET耗时约120ms
- 管道模式:100次SET打包执行耗时约6ms
1.4 持久化与运维命令
这些命令帮你了解Redis运行状态:
bash复制# 手动立即持久化(生产环境慎用)
SAVE
# 后台持久化(推荐)
BGSAVE
# 查看内存使用情况
INFO memory
# 监控实时命令(Ctrl+C退出)
MONITOR
# 查看慢查询(需要先配置slowlog)
SLOWLOG GET 10
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高阶命令应用场景
2.1 分布式锁实现
用SET命令的NX选项实现分布式锁:
bash复制# 获取锁(value应为唯一标识,px设置过期时间避免死锁)
SET resource:lock "client1" NX PX 30000
# 释放锁(Lua脚本保证原子性)
EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 resource:lock client1
2.2 发布订阅模式
消息发布与订阅:
bash复制# 订阅频道(另一个客户端执行)
SUBSCRIBE news:tech
# 发布消息
PUBLISH news:tech "Redis 7.0发布!"
2.3 Lua脚本编程
用Lua实现复杂原子操作:
bash复制# 实现限流器脚本
EVAL "local current = redis.call('get', KEYS[1]) if current and tonumber(current) > 10 then return 0 else redis.call('incr', KEYS[1]) redis.call('expire', KEYS[1], ARGV[1]) return 1 end" 1 rate.limit:api 60
3. 性能优化命令
3.1 内存优化技巧
bash复制# 查看大Key(需要redis-cli 4.0+)
redis-cli --bigkeys
# 内存分析(需要安装redis-rdb-tools)
rdb -c memory dump.rdb --bytes 1024 --largest 5
3.2 连接池配置
bash复制# 查看客户端连接
CLIENT LIST
# 设置最大连接数(redis.conf配置)
maxclients 10000
4. 常见问题排查
4.1 性能问题诊断
bash复制# 查看命令耗时统计
INFO commandstats
# 监控延迟(单位毫秒)
redis-cli --latency
4.2 数据恢复方案
bash复制# 关闭AOF持久化(异常恢复时)
CONFIG SET appendonly no
# 加载备份RDB文件
cp dump.rdb /var/lib/redis/
chown redis:redis /var/lib/redis/dump.rdb
service redis-server restart
实战经验:
- 当Redis响应变慢时,先用
INFO commandstats查看命令耗时 - 大Key删除用UNLINK替代DEL,避免阻塞
- 批量操作使用管道(Pipeline)提升10倍以上吞吐量
- 线上禁用KEYS/FLUSHALL等危险命令,通过rename-command配置重命名
