Redis缓存双写一致性

Redis缓存双写一致性

缓存双写一致性

reids中有数据需要与数据库中的一致

redis中无数据,数据库中的值是新值,回写redis

  1. 只读缓存

  2. 读写缓存

    1. 同步直写策略

      1. 写数据库同步写redis

      2. 保证缓存与数据库的一致性

    2. 异步缓写策略

      1. mysql数据变动,业务允许出现一定时间后作用redis

      2. 异常情况出现,失败动作重新修补,需要借助kafka或者RabbitMQ等消息中间件,实现重写重试

    3. 采用双检加锁策略

      1. 多个线程同时查数据库的一条数据,第一个查询数据的请求使用互斥锁

      2. 其他线程获取不到锁阻塞等待,第一个线程查到数据增加缓存

      3. 后面的线程直接走缓存

四种更新策略

  1. 先更新数据库,再更新缓存

  2. 先更新缓存,再更新数据库

  3. 先删除缓存,再更新数据库

    1. 延时双删策略

  4. 先更新数据库,再删除缓存

    1. 订阅binlog程序+中间件canal

    把要删除的缓存值或者要更新的数据库值暂存到消息队列(使用kafka/RabbitMQ),如果程序没有成功执行操作,可以从消息队列中重新读取,一旦成功执行就从消息队列中删除

canal工作原理

  • canal模拟Mysql slave的交互协议,将自己作为Mysql slave,向Mysql master发送dump协议

  • Mysql master收到dump请求,开始推送binary log给slave(即cancal)

  • canal解析binary log对象

猜你喜欢

转载自blog.csdn.net/m0_62261710/article/details/143337732