redis并发竞争问题及解决方案

 

redis并发竞争问题及解决方案

为什么会出现竞争问题?

多客户端同时并发写一个key,一个key的值是1,本来按顺序修改为2,3,4,最后是4,但是顺序变成了4,3,2,最后变成了2。

如何解决?

第一种方案:分布式锁+时间戳

分布式锁可以使用redis自身的分布式锁,也可以使用zookeeper,但是一般使用后者,

由于上面举的例子,要求key的操作需要顺序执行,所以需要保存一个时间戳判断set顺序。

系统A key 1 {ValueA 7:00}
系统B key 1 { ValueB 7:05}

假设系统B先抢到锁,将key1设置为{ValueB 7:05}。接下来系统A抢到锁,发现自己的key1的时间戳早于缓存中的时间戳(7:00<7:05),那就不做set操作了;

这种方案的前提是要保证各系统的时间是一样的,如果不能保证可以采用分布式锁+版本号的方式。

第二种方案:利用消息队列

在并发量过大的情况下,可以通过消息中间件进行处理,把并行读写进行串行化。

把Redis.set操作放在队列中使其串行化,必须的一个一个执行。

这种方式在一些高并发的场景中算是一种通用的解决方案。

posted @ 2020-02-28 21:47  一勺兔子  阅读(2419)  评论(0编辑  收藏  举报
Live2D