使用spring cache让我的接口性能瞬间提升了100倍( 四 )


 
其实是这样的:spring考虑如果除了增删改查之外,如果用户需要自定义自己的注解,或者有些比较复杂的功能需要增删改查的情况,这时就可以用@Caching 注解来实现 。
 
还要一个问题:
上面的例子中使用的缓存key是#type,但是如果有些缓存key比较复杂,是实体中的几个字段组成的,这种情况要如何定义呢?
 
一起看看下面的例子:
@Datapublic class QueryCategoryModel {/*** 系统编号*/private Long id;/*** 父分类编号*/private Long parentId;/*** 分类名称*/private String name;/*** 分类层级*/private Integer level;/*** 类型*/private Integer type;}@Cacheable(value = https://www.isolves.com/it/cxkf/kj/2020-09-27/"category", key = "#type")public CategoryModel getCategory2(QueryCategoryModel queryCategoryModel) {return getCategoryByType(queryCategoryModel.getType());} 
这个例子中需要用到QueryCategoryModel实体对象的所有字段,作为一个key,这种情况要如何定义呢?
1.自定义一个类实现KeyGenerator接口
public class CategoryGeneratorimplements KeyGenerator {@Overridepublic Object generate(Object target, Method method, Object... params) {return target.getClass().getSimpleName() + "_"+ method.getName() + "_"+ StringUtils.arrayToDelimitedString(params, "_");}} 
2.在CacheConfig类中定义CategoryGenerator的bean实例
@Beanpublic CategoryGenerator categoryGenerator() {return new CategoryGenerator();} 
3.修改之前定义的key
@Cacheable(value = https://www.isolves.com/it/cxkf/kj/2020-09-27/"category", key = "categoryGenerator")public CategoryModel getCategory2(QueryCategoryModel queryCategoryModel) {return getCategoryByType(queryCategoryModel.getType());} 
好了,spring cache先介绍到这里,如果这篇文档对您有所帮助或者有所启发的话,麻烦关注一下:苏三说技术,或者帮忙点赞或转发,坚持原创不易,您的支持是我坚持最大的动力 。后面我会分享更多更实用的干货,谢谢大家的支持 。

【使用spring cache让我的接口性能瞬间提升了100倍】


推荐阅读