主要概念:
1、如何争锁
2、锁的表达方式
3、避免死锁
4、死锁过期
网上找了一些资料:针对redisTemplate 实现的,但是在试用过的过程中也遇到了一些坑:
public interface DistributionLock {
//加锁成功 返回加锁时间
Long lock(String lockKey, String threadname);
//解锁 需要更加加锁时间判断是否有权限
void unlock(String lockKey, Long lockvalue, String threadname);
}
public class RedisDistributionLock implements DistributionLock{
private static final long LOCK_TIMEOUT = 10 * 1000; //加锁超时时间 单位毫秒 意味着加锁期间内执行完操作 如果未完成会有并发现象
private static final Logger LOG = LoggerFactory.getLogger(RedisDistributionLock.class); //redis锁日志
@Autowired
@Qualifier("redisTemplateSerializable")
private RedisTemplate redisTemplate;
//如果遇到多个RedisTemplate可以根据名字进行注入
@Resource(name = "redisTemplateString")
private RedisTempla