在调用redisTemplate.delete出现了下面的异常
NoSuchMethodError: org.springframework.data.redis.core.RedisTemplate.delete(Ljava/lang/Object;)V
看了好几篇文章都说是版本重复的问题,但是版本确实没有重复,所以采用下面的方法进行解决:
/**
* 释放分布式锁
* @param lockKey 锁的key
*/
public synchronized boolean releaseLock(String lockKey,String lockValue) {
if (redisTemplate == null) {
return true;
}
try {
if(redisTemplate.getKeySerializer() instanceof org.springframework.data.redis.serializer.StringRedisSerializer){
String luaScript = "if redis.call('get', KEYS[1]) == ARGV[1] then " +
" return redis.call('del', KEYS[1]) " +
"else " +
" return 0 " +
"end ";
redisTemplate.execute((RedisCallback<Long>) connection -> connection.eval(luaScript.getBytes(), ReturnType.INTEGER, 1, lockKey.getBytes(), lockValue.getBytes()));
return true;
}else{
redisTemplate.delete(lockKey);
return true;
}
}catch (Exception e){
logger.error("释放分布式锁失败,锁键值:"+ lockKey,e);
}catch (Throwable e){
logger.error("释放分布式锁失败,锁键值:"+ lockKey,e);
}
return false;
}