Spring Boot集成Redis缓存的工作机制及相关场景问题咨询
问题解答
1. 场景描述验证
你描述的场景完全正确。
Spring的@Cacheable注解会基于「缓存名称 + 方法入参」自动生成唯一的缓存Key,你配置的productCache专属TTL为10分钟:
- 首次查询category1时无对应缓存,会走数据库查询并将结果写入Redis
- 有效期内再次查询相同category1参数,会直接匹配到缓存Key返回结果,不访问数据库
- 查询category2时参数不同无对应缓存,会走数据库查询后单独写入缓存
- 之后再次查询category1只要还在10分钟有效期内,依然会返回已缓存的结果
2. 缓存存储逻辑验证
你的理解完全正确。
不同入参的查询结果会生成独立的缓存条目,不会合并存储到同一份缓存中。你依次查询3个不同分类,会在productCache这个缓存命名空间下生成3个不同Key的缓存值,互相独立互不干扰。
3. 定向清除缓存可行性
可以单独删除category1对应的缓存,不需要清空整个productCache。
你可以通过两种方式实现定向清除:
- 注解方式:在更新/新增对应分类产品的方法上添加
@CacheEvict注解,指定缓存名称和对应Key即可,示例:
@CacheEvict(value = "productCache", key = "#category") public void updateProduct(Category category, Product newProduct) { // 业务更新逻辑 }
- 手动删除:注入
RedisCacheManager实例,获取productCache后调用evict方法传入对应分类参数即可,不会影响其他分类的缓存内容。
注:需确保Category类已经正确重写equals和hashCode方法,否则可能出现参数相同但生成Key不一致的问题
内容的提问来源于stack exchange,提问作者user16409822
相关产品推荐
相关产品推荐

