java map 模糊匹配key_SpringCache扩展@CacheEvict的key模糊匹配清除

之前就一直集成SpringCache+redis缓存数据,这次项目中的缓存一直有缓存清除失效的问题,我就花时间好好梳理了一番,主要是针对@CacheEvict的key模糊匹配支持。熟悉redis命令的人都知道,查询和删除都可以做模糊匹配,所以我就想让SpringCache也支持模糊匹配清除。

起因是对外发布的API接口做了缓存,API需要支持分页,所以在@Cacheable的key中用current(当前页码)和classify(分类)做了匹配,在改动数据集的时候,如果每次都把所有分类的key全部清除掉有点不合理,如果只是针对改动数据集中某个分类做key的清理,这样最节省资源。

开始行动,查看SpringCache源码和原理,具体的可以网上查找,我只想说重点。

找到RedisCache中的evict,对应的就是@CacheEvict最终的执行方法,看到下面有个clear方法,使用的就是模糊匹配批量清除,一下觉得有戏。

/** (non-Javadoc)* @see org.springframework.cache.Cache#evict(java.lang.Object)*/@Overridepublic voidevict(Object key) {cacheWriter.remove(name, createAndConvertCacheKey(key)); //remove只能针对单个key删除操作

}

/** (non-Javadoc)* @see org.springframework.cache.Cache#clear()*/@Overridepublic voidclear() {

byte[]pattern = conversionService.convert(createCacheKey("*"), byte[].class);

cacheWriter.clean(name, pattern); //clean支持模糊匹配,这个是扩展的时候重点

}

1.先写个RedisCache子类,在实际中替代RedisCache

public classCustomizedRedisCache extendsRedisCache {

private finalString name;

private finalRedisCacheWriter cacheWriter;

private finalConversionService conversionService;

protectedCustomizedRedisCache(String name, RedisCacheWriter cacheWriter, RedisCacheConfiguration cacheConfig) {super(name, cacheWriter, ca

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值