redis 使用场景 - 双写一致性

redis作为缓存,mysql的数据如何与redis进行同步呢?

设置前提(业务场景):

        一致性要求高

        允许延迟一致

双写一致性:当修改了数据库的数据也要同时更新缓存数据,缓存和数据库数据要保持一致 

读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间

写操作:延迟双删        

删除缓存--------------------> 修改数据库-------------------->删除缓存

1.先删除缓存、还是先修改数据库:都会导致脏数据出现

2.为什么要删除两次缓存?         避免脏数据出现

3.为什么要延时删除?        主从模式,读写分离,同步数据不确定延时时间也有脏数据

 redis中缓存数据为   读多写少,所以我们可以用共享锁和排他锁

读写锁可以保证强一致,但是性能低

共享锁:读锁readLock,加锁后,其他线程可以共享读操作

排他锁:独占锁writeLock也叫写锁,加锁后,阻塞其他线程读写操作

允许延时一致的业务,采用异步通知

1、使用MQ中间件,更新数据后,通知缓存删除

2、利用canal中间件,不需要修改业务代码,伪装为MySQL的一个从节点,canal通过读取binlog数据更新缓存

 强一致性的话,采用Redisson提供的读写锁

1、共享锁:读锁readLock,加锁后,其他线程可以共享读操作

2、排他锁:独占锁writeLock也叫写锁,加锁后,阻塞其他线程读写操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis双写一致性问题是指在使用Redis集群时,当进行写操作时,由于数据的复制存在一定延迟,可能会导致数据不一致的情况。这种情况在以下场景中尤为常见: 1. 主节点写入后,备份节点尚未完成复制:当主节点执行写操作后,备份节点需要一定时间才能完成数据的复制。在这段时间内,如果主节点宕机或者网络发生故障,备份节点可能无法完全复制数据,导致数据不一致。 2. 主节点写入后,备份节点复制过程中失败:备份节点在复制数据过程中也可能发生故障,例如网络中断或者节点故障。这样一来,主节点写入的数据将无法正确复制到备份节点上,导致数据不一致。 为了解决Redis双写一致性问题,可以采取以下几种措施: 1. 使用Redis Sentinel:Redis Sentinel是Redis提供的高可用性解决方案,通过监控和自动故障转移来确保Redis集群的可用性。当主节点发生故障时,Sentinel会自动选举新的主节点,并将写操作重定向到新的主节点上,从而保证数据的一致性。 2. 使用Redis Cluster:Redis Cluster是Redis提供的分布式解决方案,它将数据分片存储在多个节点上,通过数据分片和复制机制来提供高可用性和数据一致性。在Redis Cluster中,每个主节点负责多个槽位的数据,备份节点会自动复制主节点的数据,确保数据的一致性。 3. 使用同步复制:在一些特定场景下,可以使用Redis的同步复制机制来提高数据的一致性。同步复制会等待所有备份节点都完成复制后才返回写操作的成功响应,确保所有节点都有相同的数据。 需要注意的是,以上措施可以提高Redis的数据一致性,但并不能完全解决所有情况下的数据不一致问题。在一些极端情况下,例如网络分区、多节点同时故障等,可能仍然存在数据不一致的可能性。因此,在设计应用程序时,需要根据实际需求和业务场景来选择适当的解决方案,并进行必要的数据容错和异常处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值