redis锁的总结

74 阅读1分钟

使用redis的演变

1.分布式

锁顾名思义 就是在分布式场景下 多台机器竞争一项资源去加锁

2.设置过期时间

3.锁的续约

4.lua实现原子性

UUID+线程id作为key

5.最后的注意NPC

Network Delay,网络延迟
Process Pause,进程暂停
Clock Drift,时钟漂移

代码

Redisson

Redisson是在redis基础实现的一个分布式工具的集合、其中就包括分布式锁。 文档地址

基础使用

pom依赖

 
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.17.7</version>
</dependency>

Redisson客户端

 
@Bean
public RedissonClient redissonClient(){
  // 配置redis信息
  Config config = new Config();
  config.useSingleServer().setAddress("redis://127.0.0.1:6379");
  // 创建 RedissonClient 对象
  return Redisson.create(config);
}

简单使用例子

 
@Autowired
private RedissonClient redissonClient;

@RequestMapping("/lock3")
public String lock3(@RequestParam("account") Long account) throws InterruptedException {
  RLock lock = redissonClient.getLock("sync_lock_" + account);
  if (!lock.tryLock()) {
    return "error";
  }
  try {
    System.out.println("正在执行业务代码");
    TimeUnit.SECONDS.sleep(3);
  } finally {
    lock.unlock();
  }
  return "ok";
}

使用Redisson来做为加锁也是一个不错的选择、可以弥补redis set...nx这种方式加锁的不足、比如解决了锁可重入锁重试机制更新key有效期