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

Posted 一勺兔子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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操作放在队列中使其串行化,必须的一个一个执行。

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

以上是关于redis并发竞争问题及解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Redis系列教程:Redis并发竞争key的解决方案详解

高并发架构系列:Redis并发竞争key的解决方案详解

解决 Redis 的并发竞争 Key 问题

12.redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗?

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题