背景
企微报警群里连续发出生产环境报错警告,报错核心信息如下:
redis setNX error java.lang.NumberFormatException: For input string: "null"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
经异常信息定位,发现是项目中自定义的Redis分布式锁报错,并且该异常是在最近需求上线后突然出现,并且伴随该异常出现的,还有需求涉及的业务数据出现部分错乱的问题。
问题分析
老规矩,先贴涉及代码
//切面
public class RedisLockAspect{
public void around(ProceedingJoinPoint pjp) {
String key = "...";
try {
//阻塞,直到获取锁为止
while (!JedisUtil.lock(key, timeOut)) {
Thread.sleep(10);
}
//执行业务逻辑
pjp.proceed();
}finally {
JedisUtil.unLock(key);
}
}
}
以上为自定义Redis分布式锁的切面,不看细节,只看整体逻辑,问题不大,那再看实际加锁方法。
public class JedisUtil{
public static boolean