Redis 并发竞争的理解和方案

Redis 58 浏览

Redis的并发竞争问题,主要是发生在并发写竞争。

例如:两个连接同时对price进行写操作,同时加10,最终结果我们知道,应该为30才是正确。

考虑到一种情况:

T1时刻,连接1将price读出,目标设置的数据为10+10 = 20。

T2时刻,连接2也将数据读出,也是为10,目标设置为20。

T3时刻,连接1将price设置为20。

T4时刻,连接2也将price设置为20,则最终结果是一个错误值20。

怎么解决?

主要思路就是把并行读写改成串行读写的方式,从而来避免资源竞争。

| 分布式锁

我们使用分布式锁,大家去抢锁,谁抢到就set操作。

setnx:我们通常使用setnx实现内置锁,执行完操作后删除对应的锁,并设置过期时间防止死锁。

什么是分布式锁?

一句话总结就是:用一个状态值表示锁,对锁的占用和释放通过状态值来标识。

| 消息队列

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

操作必须进入队列,利用其原子性使其串行化,依次操作。

|  版权声明:本文为博主原创文章,转载请注明出处。