Spring Cache 手動清Redis緩存
注冊cacheRedisTemplate
將 cache 的 RedisTemplate 注冊為Bean
@Bean(name = "cacheRedisTemplate")
public RedisTemplate cacheRedisTemplate(@Qualifier("jedisConnectionFactory") JedisConnectionFactory jedisConnectionFactory,
@Qualifier("jedisKeySerializer") RedisSerializer jedisKeySerializer,
@Qualifier("jedisValueSerializer") RedisSerializer jedisValueSerializer) {
RedisTemplate cacheRedisTemplate = new RedisTemplate();
cacheRedisTemplate.setConnectionFactory(jedisConnectionFactory);
cacheRedisTemplate.setEnableTransactionSupport(false);
cacheRedisTemplate.setKeySerializer(jedisKeySerializer);
cacheRedisTemplate.setValueSerializer(jedisValueSerializer);
return cacheRedisTemplate;
}
使用cacheRedisTemplate
那么在清除緩存的時候, 可以直接使用 cacheRedisTemplate
.
....
@Autowired
@Qualifier("cacheRedisTemplate")
var cacheRedisTemplate : RedisTemplate[String,Object] = _
...
cacheRedisTemplate.delete(s"cc.c.sta.real.in.day:$id-$start-$i")
這里是scala的語法 , java 同理
其他寫緩存 , 查緩存 , 都一樣操作 .
奇異用法
在 Mybatis 的 Dao 上加注解 .
@CacheEvict(value = CACHE_PREFIX,key = "#root.args[0]+'-'+#root.args[1]+'-'+#root.args[2]")
int clearCache(@Param("id") Long id,
@Param("start") Long start,
@Param("type") Integer type) throws DataAccessException;
Mybatis的 sql 是如下內容:
<select id="clearCache" resultType="int">
select 1
</select>
這個操作並沒有實質性的數據庫操作 , 只是為了刪除緩存 . 6666 ,不失為一種辦法....