public RedisLock{
public String lockKey;
public String lock;
private R2mClusterClient redisClient;
public RedisLock(String lockKey,String lock,R2mClusterClient redisClient){
this.lockKey = lockKey;
this.lock = lock;
this.redisClient= redisClient;
}
public voud unLock(){
String lockTimestampStr = redisClient.get(lockKey);
if(lock.equals()){
redisClient.del(lockKey );
}
}
}
public RedisLockMapper{
private R2mClusterClient r2mClusterClient;
RedisLock tryGetDistributedLock(String key, int expireTime)throw SynLockConflictException{
String requesId = UUID.randomUUID().toString;
String resutl = r2mClusterClient.set(key,requesId,"nx","ex",expireTime);
if("OK".equals(result)){
logger.info("成功获取锁");
return new RedisLock(lockKey,requesId,r2mClusterClient)
}
throw new SynLockConflictException(key);
}
void distributedLock(RedisLock redisLock){
String checkAndDelScript = "if redis.call('get', KEYS[1] === ARGV[1] then" +
"rentrn redis.call('del', KEY[1])" +
"else"+
"return()"+
"end":
r2mClusterClient.eval(checkAndDelScript,redisLock,redisLock.key,redisLock.lock);
}
}
public SynLockConflictException{
private String key;
public SynLockConflictException(String lockKey){
this.lockKey = lockKey;
}
public String getLockKey(){
return lockKey;
}
public void setLockKey(String lockKey){
this.lockKey = lockKey;
}
}
public RedisLockBusiness{
private RedisLockMapper redisLockMapper;
private static final String LOCK_COMMON_TYPE = "业务功能";
String lockKey = LOCK_COMMON_TYPE + "业务标识";
RedisLock redisLock = null;
try{
redisLock = redisLockMapper.tryGetDistributedLock(lockKey,2000);
returen;
}catch(SynLockConflictException e){
logger.error("并发冲突,冲突key:",e.getLockKey)
return;
}finally{
if(null != redisLock){
redisLockMapper.distributedLock(redisLock);
}
}
}