我已经成功重写了 BzCheckTemplateServiceImpl 中的缓存实现,参考了设备服务的 CacheService 模式。以下是主要改进:
主要改动:
- 移除直接的RedisCache依赖,只使用 CacheService 统一接口
- 使用 cacheService.getOrLoad() 方法:
- 自动处理缓存穿透防护(空对象缓存)
- 统一的缓存加载逻辑
- 随机过期时间防止缓存雪崩
- 使用 cacheService.getListOrLoad() 方法:
- 针对列表查询的优化
- 支持参数化的缓存键
- 智能缓存键设计:
- 详情缓存:template:detail:{id}
- 列表缓存:template:list:code:{code}:name:{name}:supplier:{supplierId}:type:{typeId}:status:{status}
- 根据查询条件动态生成缓存键,避免缓存混乱
- 统一的缓存清理:
- 使用 cacheService.deleteTemplateCache() 方法
- 自动清理详情缓存和所有列表缓存(通过通配符)
改进优势:
缓存穿透防护:自动缓存空对象,防止数据库被恶意查询击穿
缓存雪崩防护:随机过期时间避免大量缓存同时失效
代码简洁性:减少重复的缓存逻辑代码
一致性:与其他服务(设备、工单等)保持一致的缓存模式
性能优化:参数化缓存键避免不同查询条件互相干扰
缓存策略:
- 详情缓存:24小时过期(CacheConstants.EXPIRE_24H)
- 列表缓存:30分钟过期(CacheConstants.EXPIRE_30M)
- 空对象缓存:5分钟过期(自动处理)
作者:聂盼盼 创建时间:2025-10-27 19:30
最后编辑:聂盼盼 更新时间:2025-10-28 19:53
最后编辑:聂盼盼 更新时间:2025-10-28 19:53