Redis高级特性:持久化机制
Redis高级特性:持久化机制
Redis提供两种持久化方式:RDB(快照)和AOF(追加文件)。RDB通过生成数据集的快照实现持久化,适合大规模数据恢复但可能丢失最后一次快照后的数据。AOF记录每次写操作命令,通过重放命令恢复数据,提供更可靠的持久化但文件体积较大。
配置RDB持久化:
save 900 1 # 900秒内至少1次修改触发保存
save 300 10 # 300秒内至少10次修改触发保存
配置AOF持久化:
appendonly yes
appendfsync everysec # 每秒同步一次
Redis高级特性:事务处理
Redis事务通过MULTI、EXEC、DISCARD和WATCH命令实现。事务中的命令会按顺序串行执行,保证原子性但不支持回滚。WATCH命令用于监控键值变化,实现乐观锁机制。
事务示例:
WATCH key1
MULTI
SET key1 "value1"
INCR counter
EXEC
Redis高级特性:发布订阅模式
Redis提供PUB/SUB消息通信模式,支持频道和模式两种订阅方式。频道订阅是精确匹配,模式订阅支持通配符匹配。该模式适用于实时消息系统,但消息不持久化且离线客户端无法接收历史消息。
发布订阅命令:
SUBSCRIBE news.channel
PUBLISH news.channel "hello"
PSUBSCRIBE news.*
Redis高级特性:Lua脚本
Redis支持通过EVAL命令执行Lua脚本,保证脚本的原子性执行。脚本中可调用大部分Redis命令,适合实现复杂原子操作。通过SCRIPT LOAD和EVALSHA可缓存并重复使用脚本。
Lua脚本示例:
local value = redis.call('GET', KEYS[1])
if not value thenreturn redis.call('SET', KEYS[1], ARGV[1])
end
return nil
Redis高级特性:分布式锁
通过SET命令的NX和PX选项实现分布式锁,保证互斥性和超时释放。Redlock算法是官方推荐的分布式锁实现方案,需在多数节点获取锁才算成功。
分布式锁实现:
SET lock_key unique_value NX PX 30000
解锁需验证值再删除:
if redis.call("get",KEYS[1]) == ARGV[1] thenreturn redis.call("del",KEYS[1])
elsereturn 0
end
Redis高级特性:管道技术
Pipeline允许客户端一次性发送多个命令并批量接收响应,减少网络往返时间,显著提升批量操作性能。但不保证原子性,中间命令结果不可见。
管道使用示例(伪代码):
pipe = redis.pipeline()
pipe.set('key1', 'value1')
pipe.get('key1')
pipe.execute()
Redis高级特性:内存优化
Redis提供多种数据结构优化内存使用:
- ziplist:压缩列表优化小列表存储
- intset:整数集合优化小整数集合
- hyperloglog:基数统计优化
- 使用hash替代多个string存储对象
配置示例:
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
Redis高级特性:集群模式
Redis Cluster提供自动分片和高可用能力,采用16384个哈希槽分配数据,支持主从复制和故障转移。客户端可直接连接任意节点,通过重定向找到正确数据节点。
集群节点通信使用Gossip协议,故障检测采用心跳机制。迁移数据时不影响正常操作,支持在线扩容缩容。
集群配置示例:
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file nodes.conf