高并发下缓存+数据库双写一致性方案

plf112233g 发布于 2017/08/09 09:33
阅读 1K+
收藏 1

最近在做电商上面,需要在高并发下库存的时候需要实现缓存(redis)+数据库双写一致性的情况,大家有什么好的方案?

加载中
0
写代码的奥特曼
写代码的奥特曼

首先需要明确高并发下面库存的更新会遇到怎么样的并发问题,就好对症下药了。

我的方案是这样:

  利用productId利用hash分片打到对应的服务器的一个队列里面,当写请求(减库存)来的时候,进入队列,然后删除redis并更新数据库,当同时有读请求进来的时候,发现redis为空,那么也进入该对列排队,同时写请求执行完的时候,redis已经有数据的,写请求又能读到redis的数据的,其他的读请求看到队列里面已经有一个读请求在排队了,那么他们就不入队列,而是在外面每20毫秒取一次redis看看redis数据是否有数据了,如果有则直接返回,如果没有就取10次,一共200毫秒(看你能接受的范围),这样就既能解决高并发问题,又能解决数据库+缓存双写一致性的问题了,希望能帮你到你谢谢

p
plf112233g
谢谢你的方案,我好好消化消化
0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

先在redies上操作再入库吧

0
尚浩宇
尚浩宇

可以了解下mybatis的二级缓存redis方案是怎么做的,大致程序是当读时,先查缓存,缓存有就返回,没有就去库查询,查询后塞入redis,当增删改时,对redis缓存进行标记,再次查询时判断标记,然后根据标记去执行拉取缓存或者重新查库塞缓存,

返回顶部
顶部