设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 创业者 手机
当前位置: 首页 > 创业 > 经验 > 正文

带你了解:高并发环境下,先操作数据库还是先操作缓存?

发布时间:2021-06-03 10:41 所属栏目:29 来源:互联网
导读:
导读:1)线程A发起一个写操作,第一步set cache 2)线程B发起一个写操作,第一步setcache 3)线程B写入数据库到DB 4)线程A写入数据库到DB 执行完后,缓存保存的是B操

1)线程A发起一个写操作,第一步set cache

2)线程B发起一个写操作,第一步setcache

3)线程B写入数据库到DB

4)线程A写入数据库到DB

执行完后,缓存保存的是B操作后的数据,数据库是A操作后的数据,缓存和数据库数据不一致。

缓存维护方案三

一写(线程A)一读(线程B)操作,先操作数据库,再操作缓存。

1)线程A发起一个写操作,第一步write DB

2)线程A第二步del cache

3)线程B发起一个读操作,cache miss

4)线程B从DB获取最新数据

5)线程B同时set cache

这种方案没有明显的并发问题,但是有可能步骤二删除缓存失败,虽然概率比较小,优于方案一和方案二,平时工作中也是使用方案三。

综上对比,我们一般采用方案三,但是有没有完美全解决方案三的弊端的方法呢?

缓存维护方案四

这个是方案三的改进方案,都是先操作数据库再操作缓存,我们来看一下流程图:

通过数据库的binlog来异步淘汰key,以mysql为例,可以使用阿里的canal将binlog日志采集发送到MQ队列里面,然后通过ACK机制确认处理 这条更新消息,删除缓存,保证数据缓存一致性。

但是呢还有个问题,如果是主从数据库呢?

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读