SpringBoot 系列 -- 整合 Redis 做缓存

本贴最后更新于 2091 天前,其中的信息可能已经事过景迁

一. 缓存的作用

当应用体积大了,用户量上去了,数据规模也越来越大之后,数据库查询操作将成为用户体验的瓶颈,这时使用缓存会是一个非常好的解决办法。Spring 开始从 3.1 开始就为我们提供了基于注解的缓存支持,通过注解方式低侵入地为我们的应用提供缓存支持。在 SpringBoot 中,更是以一系列自动配置的方式使我们能更加方便的使用缓存功能。

二. 几个重要的注解

名称 解释
@EnableCaching 开启缓存注解
@Cacheable 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CachePut 保证方法被调用,又希望结果被缓存。
与 @Cacheable 区别在于是否每次都调用方法,常用于新增、更新
@CacheEvict 清空缓存

三. @Cacheeable/@CachePut/@CacheEvict 的几个常用参数

名称 解释 示例
value 缓存块的名称,必须指定一个 @Cacheable(value = " default ")
key 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,
如果不指定,则缺省按照方法的所有参数进行组合
@Cacheable(value = " default ",key = " 'info' ")
@Cacheable(value = " default ",key = " #id ")
sync
(@Cacheable)
指示底层将缓存锁住,使只有一个线程可以进入计算,而其他线程堵塞,直到返回结果更新到缓存中。
可以避免缓存击穿
@Cacheable(value = " default ",sync = true)
allEntries
(@CacheEvict )
是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存 @CachEvict(value = ” default ”,allEntries = true)

四. 开始使用 -- 整合 Redis

注: 需先启动 Redis 服务器

1. 导入 Maven 包

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

2. 配置 application.yml

spring: redis: #指定Redis数据库索引,在redis-cli中使用select index切换数据库 database: 0 #Redis服务器地址 host: 127.0.0.1 #Redis连接端口,默认为 6379 port: 6379 #Redis连接密码,默认为空 password: #连接超时时间 timeout: 0 #连接池 pool: #最大连接数(使用负值表示没有限制) max-acive: 1000 #最大阻塞等待时间 max-wait: -1 #最大空闲连接 max-idle: 10 #最小空闲连接 min-idle: 2

3. 在启动类上开启缓存注解

@SpringBootApplication @EnableCaching // 开启缓存注解 public class AnimaApplication { public static void main(String[] args) { SpringApplication.run(AnimaApplication.class, args); } }

4. 缓存 @Cacheable

@Cacheable 注解会先查询是否已经有缓存,有会使用缓存,没有则会执行方法并缓存。该注解还可预防缓存穿透。

/** * key:可使用参数时,即 key#参数名,亦可直接使用字符串‘key’ * sync:避免缓存击穿 */ @Cacheable(value = "default",key = " 'anima' + #page",sync = true) public ArrayList<animaInfo> getAnimaInfo(int page,int limit) { return animaInfoMapper.selectAnima(page,limit); }

注:@Cacheable 不支持设置缓存过期时间和自动更新

5. 更新 @CachePut

@CachePut 标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。

@CachePut(value = "default",key = " 'anima' + #anima.id") public int save(Anima anima) { return animaInfoMapper.saveAnima(anima); }

6. 清除 @CacheEvict

allEntries 参数表示是否需要清除缓存中的所有元素。默认为 false,表示不需要。当指定了 allEntries 为 true 时,Spring Cache 将忽略指定的 key。有的时候我们需要 Cache 一下清除所有的元素。

@CacheEvict(value = "default",allEntries = true) public int del(Anima anima) { return animaInfoMapper.delAnima(anima.id); }
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 1 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...