Redis缓存双写一致性
缓存双写一致性
reids中有数据需要与数据库中的一致
redis中无数据,数据库中的值是新值,回写redis
-
只读缓存
-
读写缓存
-
同步直写策略
-
写数据库同步写redis
-
保证缓存与数据库的一致性
-
-
异步缓写策略
-
mysql数据变动,业务允许出现一定时间后作用redis
-
异常情况出现,失败动作重新修补,需要借助kafka或者RabbitMQ等消息中间件,实现重写重试
-
-
采用双检加锁策略
-
多个线程同时查数据库的一条数据,第一个查询数据的请求使用互斥锁
-
其他线程获取不到锁阻塞等待,第一个线程查到数据增加缓存
-
后面的线程直接走缓存
-
-
四种更新策略
-
先更新数据库,再更新缓存
-
先更新缓存,再更新数据库
-
先删除缓存,再更新数据库
-
延时双删策略
-
-
先更新数据库,再删除缓存
-
订阅binlog程序+中间件canal
把要删除的缓存值或者要更新的数据库值暂存到消息队列(使用kafka/RabbitMQ),如果程序没有成功执行操作,可以从消息队列中重新读取,一旦成功执行就从消息队列中删除
-
canal工作原理
-
canal模拟Mysql slave的交互协议,将自己作为Mysql slave,向Mysql master发送dump协议
-
Mysql master收到dump请求,开始推送binary log给slave(即cancal)
-
canal解析binary log对象