Redis分布式集群的数据一致性
Redis数据缓存
由于Redis基于内存操作的特性,我们通常使用redis缓存一部分热点数据,作为访问DB数据前的一层缓存。但是由于单节点redis的并发访问瓶颈(读12W/s,写8W/s),而且单节点无法保障高可用,所以我们生产环境会使用redis集群,redis集群的使用会提高并发上限,提高水平扩容能力,并保障redis的高可用,但是,也会引发数据一致性问题。
redis集群主从节点数据一致性
主从数据同步分为两种同步情况,分为完整重同步和部分重同步两种。
1. 完整重同步
从节点发送PSYNC同步命令给主节点,主节点通过bgsave命令保存最新的rdb文件,发送到从节点。
2. 部分重同步
从节点网络中断后恢复,从节点根据记录的偏移量,去主节点的积压缓冲区找这段时间确实的数据,主节点把这部分数据发送到从节点,从节点可以快速的实现数据同步。
redis集群与DB的数据一致性
延时双删策略
更新操作时,先删除缓存,再更新数据库,更新完成后,延迟几十到几百毫秒,再删除缓存,保证它的最终一致性。
先删除缓存再更新数据库的问题:如果在数据库更新的时候,有一个请求过来,会重新把数据库的数据写入缓存,这样更新完数据库的话,数据库和缓存的数据就不一致。
先更新数据库再删除缓存的问题:如果更新完数据库,删除缓存失败了,那就无法保证数据一致性。