Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,常用于缓存、消息队列、实时分析等场景,它以高性能(每秒百万级操作)、低延迟和支持丰富数据结构著称,以下是详细使用指南:
Redis核心功能与应用场景
-
缓存
将数据库查询结果存入Redis,减轻数据库压力:SET user:1001 "{'name':'Alice','email':'alice@example.com'}" EX 3600 # 缓存1小时 GET user:1001
-
会话存储(Session)
替代Cookie存储用户登录状态:SET session:xyz123 "{'user_id':1001,'last_active':1630000000}"
-
实时排行榜
使用有序集合(Sorted Set):ZADD leaderboard 95 "PlayerA" 80 "PlayerB" # 添加分数 ZREVRANGE leaderboard 0 2 WITHSCORES # 查看前三名
-
消息队列
通过List实现异步任务:LPUSH tasks "send_email_to_user1001" # 生产者推送任务 RPOP tasks # 消费者获取任务
-
实时数据统计
使用HyperLogLog统计UV(独立访客):PFADD uv:20251001 "192.168.1.1" "192.168.1.2" PFCOUNT uv:20251001 # 估算唯一IP数
Redis安装与基础操作
安装(Ubuntu示例)
sudo apt update sudo apt install redis-server redis-cli ping # 检查运行状态(返回PONG即成功)
五大核心数据结构
结构类型 | 命令示例 | 用途 |
---|---|---|
String | SET/GET/DEL key |
存储文本、数字 |
Hash | HSET user:1001 name "Alice" |
存储对象属性 |
List | LPUSH/RPOP mylist item |
消息队列、时间线 |
Set | SADD tags "redis" "db" |
标签、去重集合 |
Sorted Set | ZADD rank 100 "A" |
排行榜、优先级队列 |
关键进阶配置
持久化策略
- RDB(快照):定时全量备份,适合灾难恢复
配置(redis.conf
):save 900 1 # 15分钟内至少1次修改则保存 dbfilename dump.rdb
- AOF(日志追加):记录所有写操作,数据更安全
appendonly yes appendfsync everysec # 每秒同步
高可用方案
- 主从复制:主节点写,从节点读(配置从节点):
redis-server --port 6380 --replicaof 127.0.0.1 6379
- 哨兵模式:自动故障转移(部署Sentinel节点监控主节点)。
最佳实践与避坑指南
-
内存优化
- 使用
ziplist
编码压缩小数据:hash-max-ziplist-entries 512 # Hash元素≤512时用ziplist
- 设置过期时间:
EXPIRE key 60
- 使用
-
避免大Key风险
单Key值不超过1MB(如拆分Hash字段)
-
安全防护
- 启用密码验证(
requirepass yourpassword
) - 禁止远程访问:
bind 127.0.0.1
- 启用密码验证(
-
性能监控
INFO memory # 查看内存使用 SLOWLOG GET # 分析慢查询
典型应用代码示例(Python)
import redis # 连接Redis r = redis.Redis(host='localhost', port=6379, password='mypass') # 缓存数据库查询结果 def get_user(user_id): key = f"user:{user_id}" if r.exists(key): return r.get(key) # 命中缓存 else: user_data = db.query_user(user_id) # 数据库查询 r.setex(key, 3600, user_data) # 缓存1小时 return user_data # 发布订阅消息 r.publish("news_channel", "Breaking: Redis 7.0 released!")
Redis适用场景与限制
- 推荐场景:高频读/低一致性要求数据、实时计数器、分布式锁(
SET key value NX EX 30
) - 不适用场景:
- 数据量远超内存容量(考虑SSD存储的KeyDB)
- 复杂关系查询(需用SQL数据库)
引用说明: 基于Redis官方文档(redis.io/documentation)及实践经验总结,数据持久化策略参考《Redis设计与实现》,安全配置遵循OWASP建议。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/23550.html