Redis进阶指南
本文将深入介绍Redis的高级特性和性能优化技巧,帮助你更好地使用Redis。
数据结构使用
- 字符串优化
1
2
3
4
5
6
|
# 使用MSET/MGET批量操作
MSET key1 "Hello" key2 "World"
MGET key1 key2
# 使用SETEX设置过期时间
SETEX key 3600 "value"
|
- Hash表应用
1
2
3
4
5
6
|
# 存储用户信息
HMSET user:1 username "john" age "20" city "New York"
HGET user:1 username
# 计数器
HINCRBY pageviews page:1 1
|
持久化配置
- RDB配置
1
2
3
4
5
6
7
|
# redis.conf
save 900 1 # 900秒内至少1个key变化
save 300 10 # 300秒内至少10个key变化
save 60 10000 # 60秒内至少10000个key变化
# 开启压缩
rdbcompression yes
|
- AOF配置
1
2
3
4
5
6
7
8
9
|
# 开启AOF
appendonly yes
# 同步策略
appendfsync everysec
# 自动重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
|
主从复制
- 主从配置
1
2
3
4
5
6
7
|
# 从节点配置
replicaof 192.168.1.1 6379
replica-read-only yes
# 主节点配置
requirepass masterpassword
masterauth masterpassword
|
- 复制状态监控
1
2
3
4
5
|
# 查看复制状态
INFO replication
# 查看延迟
REPLCONF ACK 0
|
哨兵模式
- 哨兵配置
1
2
3
4
|
# sentinel.conf
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
|
- 哨兵管理
1
2
3
4
5
|
# 查看主节点
SENTINEL get-master-addr-by-name mymaster
# 查看哨兵信息
SENTINEL master mymaster
|
集群部署
- 集群配置
1
2
3
4
|
# redis.conf
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
|
- 集群操作
1
2
3
4
5
|
# 创建集群
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003
# 添加节点
redis-cli --cluster add-node 127.0.0.1:7004 127.0.0.1:7001
|
性能优化
- 内存优化
1
2
3
4
5
|
# 设置最大内存
maxmemory 2gb
# 内存淘汰策略
maxmemory-policy allkeys-lru
|
- 延迟监控
1
2
3
4
5
|
# 延迟诊断
redis-cli --latency
# 慢查询日志
SLOWLOG GET 10
|
缓存设计
- 缓存更新策略
1
2
3
4
5
6
7
|
# Cache-Aside Pattern
def get_user(user_id):
user = redis.get(f"user:{user_id}")
if user is None:
user = db.get_user(user_id)
redis.setex(f"user:{user_id}", 3600, user)
return user
|
- 缓存穿透防护
1
2
3
4
5
|
# 布隆过滤器
def check_exists(item_id):
if not bloom_filter.exists(item_id):
return False
return redis.get(f"item:{item_id}")
|
事务处理
- MULTI/EXEC
1
2
3
4
|
MULTI
SET key1 "value1"
SET key2 "value2"
EXEC
|
- Watch机制
1
2
3
4
5
|
WATCH account:1
MULTI
DECRBY account:1 100
INCRBY account:2 100
EXEC
|
发布订阅
- 基本操作
1
2
3
4
5
|
# 发布消息
PUBLISH news "Hello World"
# 订阅频道
SUBSCRIBE news
|
- 模式订阅
1
2
3
4
5
|
# 订阅模式
PSUBSCRIBE news.*
# 发布消息
PUBLISH news.tech "New Technology"
|
最佳实践
-
键设计规范
-
运维建议
掌握这些Redis高级特性,将帮助你构建高性能、可靠的缓存系统。