JAVA手动删除@Cacheable缓存redis的值

在DDoSIP收集项目中,使用了Redis缓存的部分接口因业务数据变更需清空缓存。原来使用RedisTemplate无法实现,于是调整为StringRedisTemplate来成功删除缓存。

JAVA手动删除@Cacheable缓存redis的值

事件

最近在做一个DDOS IP收集的项目,部分请求的接口用到了缓存,某个业务变更了数据,需要清空下缓存,结果发现RedisTemplate无法删除

原来的写法

    @Autowired
    private RedisTemplate redisTemplate;

调整后的写法

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
### Spring CacheManager 获取 @Cacheable 缓存数据 `@Cacheable` 注解用于声明某个方法的结果会被缓存在指定的 `CacheManager` 中。如果希望手动获取由 `@Cacheable` 注解存储的缓存数据,可以通过注入 `CacheManager` 并调用其 API 来实现。 以下是具体的操作方式: #### 使用 `CacheManager` 手动访问缓存 `CacheManager` 是 Spring 提供的一个接口,负责管理多个缓存实例。要获取特定缓存中的数据,可以按照以下方式进行操作[^1]: ```java @Autowired private CacheManager cacheManager; public Object getFromCache(String cacheName, String key) { Cache cache = cacheManager.getCache(cacheName); // 根据名称获取缓存对象 if (cache != null) { return cache.get(key, Object.class); // 通过键名获取缓存条目 } return null; } ``` 上述代码展示了如何通过 `CacheManager` 的 `getCache()` 方法来获取具体的缓存实例,并进一步使用该实例的 `get()` 方法检索缓存项。 #### 配置自定义 Key 和 Cache Name 当使用 `@Cacheable` 注解时,默认情况下会基于方法参数生成唯一的缓存键。然而,在实际开发中通常需要配置自定义的缓存键和缓存名称。例如,下面是一个典型的例子[^2]: ```java @CachePut(value = "testCacheable", key = "#p0 +'_'+ #p1", cacheManager = "customCacheManager") @Override public String testCacheable(String a, String b) { System.out.println("Executing method with parameters: " + a + ", " + b); return "Result of testCacheable"; } ``` 在此示例中,`value` 属性指定了缓存名称 (`testCacheable`),而 `key` 属性则定义了一个复合键 (#p0 表示第一个参数,#p1 表示第二个参数),最后还设置了自定义的 `CacheManager` 名称为 `customCacheManager`。 #### 常见的 CacheManager 类型及其特点 不同的项目可能采用不同类型的 `CacheManager` 实现类。常见的有如下几种类型[^3]: - **ConcurrentMapCacheManager**: 默认内存级缓存方案,适用于简单的场景。 - **EhCacheCacheManager**: 支持持久化的文件或分布式缓存解决方案。 - **GuavaCacheManager**: Google 开发的高性能本地缓存库,适合中小型应用。 - **RedisCacheManager**: 利用 Redis 进行远程集中式缓存管理,特别适合微服务架构下的共享缓存需求[^4]。 对于 Redis 场景下,还可以设置额外的关键字解析器(如 `keyGenerator` 或者 `SpEL` 表达式)。这有助于更精确地控制缓存行为以及提高性能优化能力。 --- #### 注意事项 尽管可以直接借助于 `CacheManager` 访问底层缓存机制,但在大多数业务逻辑里并不推荐这样做——因为这样可能会破坏原有设计模式并增加不必要的复杂度;相反应该尽可能依赖框架本身所提供的功能完成相应任务即可满足大部分需求。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA拾贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值