首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

整合@Cache和Redis

对于缓存声明,spring的缓存提供了一组java注解:

@Cacheable:触发缓存写入。

@CacheEvict:触发缓存清除。

@CachePut:更新缓存(不会影响到方法的运行)。

@Caching:重新组合要应用于方法的多个缓存操作。

@CacheConfig:设置类级别上共享的一些常见缓存设置。

@Cacheable注解

顾名思义,@Cacheable可以用来进行缓存的写入,将结果存储在缓存中,以便于在后续调用的时候可以直接返回缓存中的值,而不必再执行实际的方法。最简单的使用方式,注解名称=缓存名称,使用例子如下:

一个方法可以对应两个缓存名称,如下:

@Cacheable的缓存名称是可以配置动态参数的,比如选择传入的参数,如下: (以下示例是使用SpEL声明,如果您不熟悉SpEL,可以阅读Spring Expression Language)

@Cacheable还可以设置根据条件判断是否需要缓存

condition:取决于给定的参数是否满足条件

unless:取决于返回值是否满足条件

以下是一个简单的例子:

@Cacheable还可以设置:keyGenerator(指定key自动生成方法),cacheManager(指定使用的缓存管理),cacheResolver(指定使用缓存的解析器)等,这些参数比较适合全局设置,这里就不多做介绍了。

@CachePut注解

@CachePut:当需要更新缓存而不干扰方法的运行时 ,可以使用该注解。也就是说,始终执行该方法,并将结果放入缓存,注解参数与@Cacheable相同。以下是一个简单的例子:

通常强烈建议不要对同一方法同时使用@CachePut和@Cacheable注解,因为它们具有不同的行为。可能会产生不可思议的BUG哦。

@CacheEvict注解

@CacheEvict:删除缓存的注解,这对删除旧的数据和无用的数据是非常有用的。这里还多了一个参数(allEntries),设置allEntries=true时,可以对整个条目进行批量删除。以下是个简单的例子:

@Caching注解

@Caching:在使用缓存的时候,有可能会同时进行更新和删除,会出现同时使用多个注解的情况.而@Caching可以实现。以下是个简单的例子:

@CacheConfig注解

@CacheConfig:缓存提供了许多的注解选项,但是有一些公用的操作,我们可以使用@CacheConfig在类上进行全局设置。以下是个简单的例子:

可以共享缓存名称,统一配置KeyGenerator,CacheManager,CacheResolver。

实例

在springboot中怎么使用redis来作为缓存.

为spring cache配置redis作为缓存

1.在pom.xml引入redis依赖

2.springboot集成redis配置文件(在本地启动的redis),在springboot中使用redis,只要配置文件写有redis配置,代码就可以直接使用了。

3.redis缓存配置类CacheConfig,这里对spring的缓存进行了配置,包括KeyGenerator,CacheResolver,CacheErrorHandler,CacheManager,还有redis序列化方式。

代码使用

测试@Cacheable方法

执行结果

只有一次输出了'执行方法...',后面直接从缓存获取,不会再进入方法。

测试@CachePut方法:对缓存进行了修改

执行结果

对缓存进行了更新,获取值的时候取了新的值

测试@CacheEvict方法:缓存被清空,再次findUser的时候又重新执行了方法。

执行结果

这里清除了缓存,为什么还是没有执行方法呢?因为这个方法我们定了两个value值,清了一个还有一个

source: cnblogs.com/wenjunwei/p/10779450.html

喜欢,在看

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210928A0FF7600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券