fix(cache): 解决缓存中JSON null值导致的空指针问题
- 添加对历史缓存中JSON "null" 字符串的兼容处理 - 当缓存解析出null值时清理缓存并回源数据库 - 在CmsWebsiteServiceImpl中增加缓存清理逻辑 - 在ShopWebsiteServiceImpl中统一缓存异常处理机制 - 添加单元测试验证JSON null值场景的正确回退行为
This commit is contained in:
@@ -337,9 +337,16 @@ public class CmsWebsiteServiceImpl extends ServiceImpl<CmsWebsiteMapper, CmsWebs
|
||||
if (StrUtil.isNotBlank(siteInfo)) {
|
||||
log.info("从缓存获取网站信息,租户ID: {}", tenantId);
|
||||
try {
|
||||
return JSONUtil.parseObject(siteInfo, ShopVo.class);
|
||||
// 兼容历史缓存:JSON "null" 会被解析为 null;此时应视为未命中并回源数据库。
|
||||
ShopVo cacheVo = JSONUtil.parseObject(siteInfo, ShopVo.class);
|
||||
if (cacheVo != null) {
|
||||
return cacheVo;
|
||||
}
|
||||
log.warn("网站信息缓存命中但内容为空(null),清理缓存后回源数据库,租户ID: {}", tenantId);
|
||||
redisUtil.delete(cacheKey);
|
||||
} catch (Exception e) {
|
||||
log.warn("缓存解析失败,从数据库重新获取: {}", e.getMessage());
|
||||
log.warn("缓存解析失败,清理缓存后从数据库重新获取: {}", e.getMessage());
|
||||
redisUtil.delete(cacheKey);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,9 @@ public class ShopWebsiteServiceImpl implements ShopWebsiteService {
|
||||
log.info("从缓存获取商城信息,租户ID: {}", tenantId);
|
||||
return cacheVo;
|
||||
}
|
||||
// 兼容历史缓存:JSON "null" 会被解析为 null;此时清理缓存并回源。
|
||||
log.warn("商城信息缓存命中但内容为空(null),清理缓存后回源数据库,租户ID: {}", tenantId);
|
||||
redisUtil.delete(cacheKey);
|
||||
} catch (Exception e) {
|
||||
log.warn("商城缓存解析失败,清理缓存后重新获取: {}", e.getMessage());
|
||||
redisUtil.delete(cacheKey);
|
||||
|
||||
Reference in New Issue
Block a user