redis并发写数据时解决方案

本文探讨了在多线程环境下,同时写入导致预期结果异常的问题。提出两种解决方案:一是使用分布式锁配合时间戳,确保同一时间只有一个线程能进行操作;二是借助消息队列实现操作的串行化,避免并发冲突。这两种方法旨在保障数据一致性,防止并发写入带来的不一致结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题场景:多个线程同时写key

本来需求 1,2,3,4,5 最后结果为5
可能最后结果 2,1,3,5,4 最后结果为4
产生异常,与预期不同。

方案一 分布式锁+时间戳

setp1 分布式锁

setnx aaa;返回结果为1才可以进行操作,操作完 del aaa;
(同时需考虑set ex uuid lua)
可以阻塞其他线程的操作,抢到锁的线程才可以进行操作

setp2 加时间戳

在进行设定值的时候,加上时间戳或版本号
每次设置时比对这个时间戳或版本号,如果为旧版本则丢弃,最终值为5

方案二 消息队列

在并发量过大的情况下,可以使用消息队列使并行化的操作串行化
必须的一个一个执行。
ack 关闭自动提交。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值