问题场景:多个线程同时写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 关闭自动提交。