目录
前文链接:
什么是分布式锁
修改秒杀优惠券的流程
分布式锁的实现
基于Redis的分布式锁(非阻塞实现)
ILock接口
public interface ILock {
/**
* 尝试获取锁
* @param timeoutSec 锁持有的过期时间,过期后自动释放
* @return true代表获取锁成功,false代表获取锁失败
*/
boolean trLock(long timeoutSec);
/**
* 释放锁
*/
void unlock();
}
创建一个类并实现ILock接口,用自定义的name值来区分锁,同时获取当前线程的Id作为value值存入进redis中,并设置超时时间
public class SimpleRedisLock implements ILock {
private static final String KEY_PREFIX="lock:";
private String name;
private StringRedisTemplate stringRedisTemplate;
public SimpleRedisLock(String name, StringRedisTemplate stringRedisTemplate) {
this.name = name;
this.stringRedisTemplate = stringRedisTemplate;
}
@Override
public boolea