Redis核心用法与通用命令全解析
Redis核心用法与通用命令全解析
——从基础操作到高效实践
一、Redis基础知识速览
Redis是一款高性能的键值存储系统,支持String、Hash、List、Set、Sorted Set五种核心数据结构,以及Bitmaps、HyperLogLog、Streams等扩展类型。其单线程模型和内存存储特性使其在缓存、计数器、消息队列等场景中表现出色。
二、核心命令详解(附实用示例)
1. 通用键操作命令
(1)键管理
# 删除键(支持批量)
DEL user:1001 order:2023 # 检查键是否存在
EXISTS article:987 # 设置过期时间(秒)
EXPIRE session:abc 3600 # 查看剩余生存时间(秒)
TTL session:abc # 移除过期时间
PERSIST config:api_rate
场景示例:用户会话管理(设置30分钟失效的登录态)
(2)键查询与遍历
# 匹配所有以"prod_"开头的键
KEYS prod_* # 分页扫描键(避免阻塞)
SCAN 0 MATCH user:* COUNT 100
注意:
KEYS
命令在生产环境需谨慎使用,可能引发性能问题。
2. 字符串(String)操作
# 设置/获取值
SET product:123 "{\"name\":\"Book\", \"price\":59}"
GET product:123 # 原子递增计数器
INCR page_views:home # 追加字符串
APPEND log:error "Connection timeout" # 获取子串
GETRANGE product:123 0 4 # 返回"{\"na"
典型应用:JSON对象缓存、访问量统计
3. 哈希(Hash)操作
# 存储用户信息
HSET user:1001 name "Alice" age 28 email "alice@example.com" # 批量获取字段
HMGET user:1001 name age # 获取所有键值对
HGETALL user:1001 # 原子增减字段值
HINCRBY user:1001 login_count 1
适用场景:对象属性存储(如电商购物车)
4. 列表(List)操作
# 消息队列实现
LPUSH notifications:user100 "New message"
RPOP notifications:user100 # 获取最新10条日志
LRANGE log:system 0 9 # 阻塞式弹出元素
BRPOP task_queue 30 # 等待30秒
优势:支持双向操作,天然适合队列/栈结构
5. 集合(Set)与有序集合(ZSet)
# 存储标签集合
SADD article:5566 tags:python tags:database # 求共同关注(交集)
SINTER user:A:follow user:B:follow # 存储排行榜
ZADD leaderboard 95 "PlayerA" 87 "PlayerB" # 分页获取Top10
ZREVRANGE leaderboard 0 9 WITHSCORES
技巧:ZSet的
ZRANGEBYSCORE
可实现范围查询,ZUNIONSTORE
支持复杂聚合
三、高级用法与性能优化
1. 事务与原子性
MULTI
INCR inventory:item100
DECR balance:user5
EXEC
注意事项:
- Redis事务非严格ACID,单命令原子但整体可能部分失败
- 可结合
WATCH
实现乐观锁
2. 管道(Pipeline)批量操作
pipe = redis.pipeline()
for user_id in user_ids: pipe.hgetall(f"user:{user_id}")
results = pipe.execute()
收益:网络往返时间减少90%+,适合批量写入场景
3. Lua脚本原子操作
-- 库存扣减脚本
local stock = tonumber(redis.call('GET', KEYS[1]))
if stock >= tonumber(ARGV[1]) then redis.call('DECRBY', KEYS[1], ARGV[1]) return 1
else return 0
end
优势:避免竞态条件,保证复杂逻辑的原子性
四、安全与运维最佳实践
1. 安全配置
# 设置访问密码
CONFIG SET requirepass "YourSecureP@ssw0rd" # IP白名单限制
bind 192.168.1.10 10.0.0.0/24
注意:生产环境必须启用密码认证
2. 性能优化技巧
- 避免大Key:单个String值不超过10KB,Hash/List元素不超过5000
- 使用Lazy Free:异步删除大对象防止阻塞
UNLINK big_key # 替代DEL命令
- 合理设置过期时间:结合
EXPIREAT
按时间戳精确控制
五、常见问题排查
现象 | 排查命令 | 解决方案 |
---|---|---|
内存突然飙升 | INFO MEMORY + CLIENT LIST | 检查是否有MONITOR命令执行 |
客户端周期性超时 | SLOWLOG GET | 优化慢查询,如避免HGETALL 大Hash |
主从数据不一致 | INFO REPLICATION | 检查网络延迟与复制积压缓冲区 |
通过本文的1500余字详解,您已掌握Redis的核心用法与进阶技巧。如需深入学习特定功能(如Streams消息流、集群部署),可访问Redis官方文档或参考《Redis设计与实现》等专业书籍。
参考资料: