mysql

缓存与数据库一致性保证

2018-07-27  本文已影响13人  没睡醒的鱼

为什么会数据不一致

写流程:

读流程:

但是会发生以下情况导致不一致:

优化解决方案

以项目中的商品库存为例,如果数据库中产品的库存是100,那么查询到的库存是100,然后插入缓存,插入完缓存后,原来那个更新数据库的线程把数据库更新为了99,导致数据库与缓存不一致的情况

针对上面的场景:创建一个队列,当有写请求时,先把它丢到队列里去,当写请求完后在从队列里去除。如果在写的过程中,遇到了上述场景,先去缓存里看下有没有数据,如果没有,再去看看队列中看看相应的写请求没有完成,如果没有完成就把查询请求放到相同的队列中,直到写请求完成后才执行查询操作

补充

对于缓存和数据库不一致的情况,可以先清除缓存,第一个数据库查询请求到达数据库,将读取到的值更新到缓存,这样缓存与数据库就是一致的

上一篇下一篇

猜你喜欢

热点阅读