您的位置 首页 > 娱乐休闲

资深Java架构师教你Spring boot如何使用redis做缓存及缓存注解

1. 概述

本文介绍Spring boot 如何使用redis做缓存,如何对redis缓存进行定制化配置(如key的有效期)以及spring boot 如何初始化redis做缓存。使用具体的代码介绍了@Cacheable,@CacheEvict,@CachePut,@CacheConfig等注解及其属性的用法。

2. spring boot集成redis

2.1. a

配置a,包含如下信息:

  • 指定缓存的类型

  • 配置redis的服务器信息

  • 请不要配置值,原因后面再说

2.2. 配置启动类

  • @EnableCaching: 启动缓存

  • 重新配置RedisCacheManager,使用新的配置的值

经过以上配置后,redis缓存管理对象已经生成。下面简单介绍spring boot如何初始化redis缓存。

2.3. spring boot 如何初始化redis做缓存

缓存管理接口org.,spring boot就是通过此类实现缓存的管理。redis对应此接口的实现类是org.。下面介绍此类如何生成。

首先我们配置a的.* 属性后@EnableCaching后,spring会执行RedisAutoConfiguration,初始化RedisTemplate和StringRedisTemplate

然后RedisCacheConfiguration会将RedisAutoConfiguration生成的RedisTemplate注入方法生成RedisCacheManager 后。

根据以上的分析,我们知道在spring已经帮我们生成一个RedisCacheManager并进行了配置。

最后我们再可以对这个RedisCacheManager进行二次配置,这里只列出配置key的有效期

注意:

请不要在a中配置: =book1,book2,否则会导致我们新的配置无法作用到这些配置的cache上。这是因为RedisCacheConfiguration 初始化RedisCacheManager后,会立即调用RedisCacheConfiguration 的初始化cache,而此时configRedisCacheManger还没有执行此方法,使得我们的配置无法启作用。反之,如果不配置,则后创建cache,会使用我们的配置。

3. spring缓存注解的用法

上节已经介绍如何配置缓存,这节介绍如何使用缓存。

3.1 辅助类

下方会使用到的辅助类

Book:

BookQry : 封装请求类

AbstractService

抽象类:初始化repositoryBook 值,模拟数据库数据。BookService 和BookService2都是继承此类

3.2. @Cacheable

@Cacheable的属性的意义

  • cacheNames:指定缓存的名称

  • key:定义组成的key值,如果不定义,则使用全部的参数计算一个key值。可以使用spring El表达式

  • 具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的可以加群。java架构群:591240817 一起交流。

  • keyGenerator:定义key生成的类,和key的不能同时存在

  • sync:如果设置sync=true:a. 如果缓存中没有数据,多个线程同时访问这个方法,则只有一个方法会执行到方法,其它方法需要等待; b. 如果缓存中已经有数据,则多个线程可以同时从缓存中获取数据

condition和unless 只满足特定条件才进行缓存:

  • condition: 在执行方法前,condition的值为true,则缓存数据

  • unless :在执行方法后,判断unless ,如果值为true,则不缓存数据

  • conditon和unless可以同时使用,则此时只缓存同时满足两者的记录

3.3. @CacheEvict

删除缓存

  • allEntries = true: 清空缓存book1里的所有值

  • allEntries = false: 默认值,此时只删除key对应的值

3.4. @CachePut

每次执行都会执行方法,无论缓存里是否有值,同时使用新的返回值的替换缓存中的值。这里不同于@Cacheable:@Cacheable如果缓存没有值,从则执行方法并缓存数据,如果缓存有值,则从缓存中获取值

3.5. @CacheConfig

@CacheConfig: 类级别的注解:如果我们在此注解中定义cacheNames,则此类中的所有方法上 @Cacheable的cacheNames默认都是此值。当然@Cacheable也可以重定义cacheNames的值

4. 测试

4.1. 准备 redis

可以通过docker安装redis,非常方便。docker的用法见docker 安装和常用命令

4.2. 测试类

如果要验证以上各个方法,可以下载工程,并执行测试类CacheTest。由于比较简单,这里不在演示。

5. 代码

本文的详细代码Github

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“java如何使用缓存,java如何缓存bean的信息,java如何缓存数据流,java如何缓存数组”边界阅读