3.【Redis系列】Redis的高级应用-分布式锁
原文: 3.【Redis系列】Redis的高级应用-分布式锁 在进行分布式应用逻辑开发时,经常会遇到并发问题。 比如我们在修改一个用户的信息,首先需要获取用户信息,再内存中修改后,再存回去。这个过程如果有其他线程同时操作,着就会产生并发问题,因为读取和存储都不是原子性的。我们需要通过分布式锁限制程序的并发执行。 1.分布式锁 分布式锁本质上就是在Redis里面占一个车位,当有新的车辆过来时,发现已经有一辆车停在车位上,只能是放弃或者稍后再来。 我们用命令模拟下: > setnx lock : qqsir true OK . . . do something . . . > del lock : qqsir 但是这样有一个问题,如果中间的逻辑出现问题,导致没有执行del,这样就会陷入死锁,锁永远不能被释放。 改进1: 我们可以对key设置一个过期时间,这样即使后面逻辑报错,时间到期后也可以将锁是释放掉 > setnx lock : qqsir true OK > expire lock : qqsir 5 . . . do something . . . > del lock : qqsir 以上的逻辑其实还是存在问题,假设setnx和expire之间突然断电,没有执行,这样锁还是无法释放。这个问题的根本原因就是setnx和expire的操作不是原子性的。 为了解决这个问题