Loading...
墨滴

Trifolium。

2021/04/09  阅读:18  主题:默认主题

推荐一款好用的spring缓存组件

一款好用的spring缓存注解组件

  在我们日常使用springMvc或springBoot项目的时候,很多接口需要我们做缓存处理,比如列表接口,详情接口等,spring给我们提供了一些注解的方式来对接口的数据进行缓存,但是对于spring开发者来说往往是为很多技术做到大而全的兼容,而降低了灵活性。但实际项目中我们可能用的最多的也就是那么几个组件和中间件,尤其数缓存中间件,除了redis缓存其他的很少用到,尤其是在如今的微服务和高并发有要求的情况下,redis成为了最常用的缓存中间件。
  为了解决这些问题,我开发了一款缓存注解组件tutucache,它对redis的支持更加友好,为了更好的了解它,请看下面的代码:

// 缓存这个方法的返回值,过期时间为10秒
@TuCache(key="itemList:#{#endStr}",expire = 10)
public List<String> itemList(String endStr){
    return Arrays.asList("tu","nan",endStr);
}
// 在执行这个方法时,删除两个缓存,删除itemList开头的所有缓存,删除id为参数值的itemDetail缓存
@TuCacheClear(keys={"itemList:","test_service:itemDetail:#{#id}"}, sync = true)
public void deleteItem(Long id){
}

是不是看起来很简单明了,用起来也是非常简单,在项目中更是零配置,只需要引入maven依赖就可以了。

<dependency>
  <groupId>co.tunan.tucache</groupId>
  <artifactId>tucache-spring-boot-starter</artifactId>
  <version>1.0.0</version>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

  实战中我们会遇到各种复杂的业务和接口,像跨业务但是数据又有关联的情况,比如:我们要查询一篇文章的评论,评论列表中也需要用户的基本信息,我们对评论列表进行缓存后,如果用户修改了他的基本信息,这时候缓存中的用户数据并没有改变,遇到这种问题我们如果自己写一些清理缓存的代码就很痛苦了代码杂乱不堪,我们在实际项目中是通过两层service的方式进行编写的,在两个service的相关方法上加上我们的注解,如我们外层的service方法缓存了评论列表和用户信息的数据,内层的service只缓存了评论列表,那么用户修改自己的信息时我们只需要删除外层的service缓存,下一次查询,只需要查询用户信息就可以了,不需要对评论进行查询,因为内层的service已经缓存了评论列表,对于更加复杂的业务,需要我们设计一套合理的缓存key,设计合理的缓存key对于我们使用tutucache缓存组件非常重要,如我们对文章详情的缓存设计如下articel_detail:#{#catalogId}:#{#articleId},这样在我们删除一个目录(catalog)的时候直接删除articel_detail:#{#catalogId}: 缓存即可,但是副作用也很明显,就是每次获取详情的时候要带上cataLogId参数,实际上这也是很容易的。

  该组件可不仅仅支持redis缓存,只要实现它提供的一些接口理论上支持任意缓存,更加适合我们项目中的一些实际情况。tutu-cache 是为了解决SpringCache缓存注解不够灵活的问题而做的SpringAop项目。 使用tutu-cache注解来代替@Cacheable和@CacheEvict等注解。我开源一些这样的项目,给大家缓解如今内卷严重的996行业,毕竟时间就是生命。
项目地址: https://github.com/trifolium-wang/tutu-cache

Trifolium。

2021/04/09  阅读:18  主题:默认主题

作者介绍

Trifolium。