一、分布式锁怎么实现?
分布式锁是并发业务下的刚需,虽然实现五花八门:ZooKeeper有Znode顺序节点,数据库有表级锁和乐/悲观锁,Redis有setNx,但是殊途同归,最终还是要回到互斥上来,本篇介绍Redisson,那就以redis为例。
怎么写一个简单的Redis分布式锁?
以Spring Data Redis为例,用RedisTemplate来操作Redis(setIfAbsent已经是setNx + expire的合并命令),如下
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Override
public void addQuestesReply(QuestesReplyAddReq vo) {
//分布式锁占坑
Boolean lock = redisTemplate.opsForValue().setIfAbsent(BaseConstant.REPLY_LOCK + vo.getQuestesId(), vo.getQuestesId().toString(),30, TimeUnit.SECONDS);
if(lock){
//获取账户信息
Account account = accountService.getOne(new LambdaQueryWrapper<Account>()
.eq(Account::getOrganizeI