并发环境下,先操作数据库还是先操作缓存?
前言
❝
https://github.com/whx123/JavaHome
❞
缓存维护方案一

1.线程A发起一个写操作,第一步del cache 2.线程A第二步写入新数据到DB 3.线程B发起一个读操作,cache miss缓存失效了。 4.线程B从DB获取最新数据 5.线程B执行set cache,把从DB读到的数据,更新到缓存。

1.线程A发起一个写操作,第一步del cache 2.此时线程B发起一个读操作,cache miss 3.线程B继续读DB,读出来一个老数据 4.然后老数据设置入cache 5.线程A写入DB最新的数据
缓存维护方案二

1.线程A发起一个写操作,第一步set cache 2.线程A第二步写入新数据到DB 3.线程B发起一个写操作,set cache 4.线程B第二步写入新数据到DB

1.线程A发起一个写操作,第一步set cache 2.线程B发起一个写操作,第一步set cache 3.线程B写入数据库到DB 4.线程A写入数据库到DB
缓存维护方案三

1.线程A发起一个写操作,第一步write DB 2.线程A第二步del cache 3.线程B发起一个读操作,cache miss 4.线程B从DB获取最新数据 5.线程B同时set cache
缓存维护方案四

缓存维护方案五

缓存维护总结
1.读取缓存中是否有相关数据 2.如果缓存中有相关数据value,则返回 3.如果缓存中没有相关数据,则从数据库读取相关数据放入缓存中key->value,再返回 4.如果有更新数据,则先更新数据库,再删除缓存 5.为了保证第四步删除缓存成功,使用binlog异步删除 6.如果是主从数据库,binglog取自于从库 7.如果是一主多从,每个从库都要采集binlog,然后消费端收到最后一台binlog数据才删除缓存
个人公众号
公众号:捡田螺的小男孩
欢迎大家关注,大家一起学习,一起讨论哈。 回复pdf,获得电子书学习