我已经成功重写了 BzCheckTemplateServiceImpl 中的缓存实现,参考了设备服务的 CacheService 模式。以下是主要改进:

主要改动:

  1. 移除直接的RedisCache依赖,只使用 CacheService 统一接口
  2. 使用 cacheService.getOrLoad() 方法:
    • 自动处理缓存穿透防护(空对象缓存)
    • 统一的缓存加载逻辑
    • 随机过期时间防止缓存雪崩
  3. 使用 cacheService.getListOrLoad() 方法:
    • 针对列表查询的优化
    • 支持参数化的缓存键
  4. 智能缓存键设计:
    • 详情缓存:template:detail:{id}
    • 列表缓存:template:list:code:{code}:name:{name}:supplier:{supplierId}:type:{typeId}:status:{status}
    • 根据查询条件动态生成缓存键,避免缓存混乱
  5. 统一的缓存清理:
    • 使用 cacheService.deleteTemplateCache() 方法
    • 自动清理详情缓存和所有列表缓存(通过通配符)

改进优势:

  1. 缓存穿透防护:自动缓存空对象,防止数据库被恶意查询击穿

  2. 缓存雪崩防护:随机过期时间避免大量缓存同时失效

  3. 代码简洁性:减少重复的缓存逻辑代码

  4. 一致性:与其他服务(设备、工单等)保持一致的缓存模式

  5. 性能优化:参数化缓存键避免不同查询条件互相干扰

    缓存策略:

  • 详情缓存:24小时过期(CacheConstants.EXPIRE_24H)
  • 列表缓存:30分钟过期(CacheConstants.EXPIRE_30M)
  • 空对象缓存:5分钟过期(自动处理)
作者:聂盼盼  创建时间:2025-10-27 19:30
最后编辑:聂盼盼  更新时间:2025-10-28 19:53