springboot+redis有时get不到值的情况
最近使用springBoot+redis项目访问是不是弹500和error,而且是无规律弹框,上一秒出问题的接口下一秒却又可以了???后面经过排查发现是reids的问题,报error是拦截器里从redis get登录存入的token时返回nul让项目认为是过期缓存返回401导致的,500错误经过检查是获取 get登录存入的用户对象信息时返回null导致的空指针异常,问题很明显就是存入的值没获取到,
·
最近使用springBoot+redis项目访问是不是弹500和error,而且是无规律弹框,上一秒出问题的接口下一秒却又可以了???后面经过排查发现是reids的问题,报error是拦截器里从redis get登录存入的token时返回nul让项目认为是过期缓存返回401导致的,500错误经过检查是获取 get登录存入的用户对象信息时返回null导致的空指针异常,问题很明显就是存入的值没获取到,本来以为是序列化的问题,但转念一想我这是不定期报错又不是都报错,如果是序列化问题不应该接口都不行吗,折腾了两天都没找到原因,人都麻了,只到有一天我突然发现在拦截器里这几行代码:
//更新缓存时间
String key = LOGIN + loginName;
redisService.getAndUpdateTime(key);
redisService.getAndUpdateTime(TOKEN + loginName);
点进方法一看:
/**
* 获得 key 对应的键值,并更新缓存时间,时间长度为默认值
*
* @param key
* @return
*/
public T getAndUpdateTime(String key) {
T result = get(key);
if (result != null) {
set(key, result);
}
return result;
}
意思是每次调接口都会重新set token和对象已延长登录时间,拿会不会是在覆盖值时取值导致的,然后我发现这个
注释掉更新缓存的代码后,果然问题解决
古古怪怪的问题,人麻了。。
更多推荐
已为社区贡献1条内容
所有评论(0)