SpringBoot自带的内部缓存的使用

SpringBoot缓存介绍

Spring框架支持透明的想应用程序添加缓存和管理缓存,核心作用就是对需要操作数据的方法进行缓存,减少操作数据的执行次数,同时不对程序本身造成任何干扰。Spring Boot继承了Spring框架的缓存管理功能,通过使用@EnableCaching注解开启基于注解的缓存支持,Spring Boot就可以启动缓存管理的自动化配置。
对于整合redis缓存的使用,和自动配置说明 可以参考这篇博文 SpringBoot整合Redis缓存

一、缓存基本使用

1、开启缓存@EnableCaching

在SpringBoot启动类上,增加注解@EnableCaching 开启Spring Boot基于注解的缓存管理支持

@EnableCaching  // 开启Spring Boot基于注解的缓存管理支持
@SpringBootApplication
public class Springboot04CacheApplication {
    public static void main(String[] args) {
    SpringApplication.run(Springboot04CacheApplication.class, args);
    }
}

2、使用缓存@Cacheable(cacheNames = “comment”)

// 根据评论id查询评论信息
@Cacheable(cacheNames = "comment")
public Comment findById(int comment_id){
    Optional<Comment> optional = commentRepository.findCommentById(comment_id);
    if(optional.isPresent()){
    	return optional.get();
    }
    return null;
}

上述代码中,在service类的一个查询方法上,添加缓存注解@Cacheable,该注解的作用是对查询结果Comment存放在SpringBoot的默认缓存中,并且名称为 “comment”的命名空间中,对应缓存唯一标识。并且缓存数据的唯一主键,对应为方法参数 comment_id的值。

3、默认缓存实现 SimpleCacheConfiguration

在这里插入图片描述

     可以看到SpringBoot支持多个注解的实现,会按照优先级或者指定的实现依次进行自动配置,如果没有额外的缓存实现,会使用默认的简单内存缓存实现  SimpleCacheConfiguration,其返回的缓存管理器是ConcurrentMapCacheManager 其内部维护了一个ConcurrentMap来实现缓存功能。

二、缓存的相关注解

@EnableCaching注解

@EnableCaching是由spring框架提供的,springboot框架对该注解进行了继承,该注解需要配置在类上(在SpringBoot中,通常配置在项目启动类上),用于开启基于注解的缓存支持

@Cacheable注解

@Cacheable注解也是由spring框架提供的,可以作用于类或方法(通常用在数据查询方法上),用于对方法结果进行缓存存储。注解的执行顺序是,先进行缓存查询,如果为空则进行方法查询,并将结果进行缓存;如果缓存中有数据,不进行方法查询,而是直接使用缓存数据
@Cacheable支持的属性
在这里插入图片描述
执行流程&时机

  1. 方法执行之前,先根据参数查询Cache,尝试按照cacheNames指定的名字获取缓存
  2. 如果未获取到缓存,则创建缓存
  3. 获取到缓存后,根据key的生成策略,在缓存中进行获取返回值。

常见的KeyGenerator
在这里插入图片描述

常用的SPEL表达式
在这里插入图片描述

@CachePut 更新缓存

  1. @CachePut 适用于更新数据的方法。目标方法执行完之后生效, @CachePut被使用于修改操作比较多,哪怕缓存中已经存在目标值了,但是这个注解保证这个方法依然会执行,执行之后的结果被保存在缓存中
  2. @CachePut注解也提供了多个属性,这些属性与@Cacheable注解的属性完全相同,除了不支持sync属性。
  3. 更新操作,前端会把id+实体传递到后端使用,我们就直接指定方法的返回值从新存进缓存时的key=“#id” , 如果前端只是给了实体,我们就使用 key=“#实体.id” 获取key. 同时,他的执行时机是目标方法结束后执行, 所以也可以使用 key=“#result.id” , 拿出返回值的id

@CacheEvict 删除缓存

@CacheEvict注解是由Spring框架提供的,可以作用于类或方法(通常用在数据删除方法上),该注解
的作用是删除缓存数据。@CacheEvict注解的默认执行顺序是,先进行方法调用,然后将缓存进行清除。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot集成Redis可以使用Spring Data Redis。Spring Data Redis是Spring Data的一部分,它提供了对Redis的支持,包括对Redis的连接、操作、数据序列化等。 以下是使用Spring Boot集成Redis缓存的步骤: 1. 添加Spring Data Redis和Redis客户端依赖 在Maven中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> ``` 2. 配置Redis连接信息 在application.properties中添加以下配置: ```properties spring.redis.host=localhost spring.redis.port=6379 ``` 3. 配置Redis缓存管理器 在Java配置类中添加以下代码: ```java @Configuration @EnableCaching public class CacheConfig { @Bean public RedisConnectionFactory redisConnectionFactory() { return new JedisConnectionFactory(); } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory()); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } @Bean public CacheManager cacheManager() { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate()); cacheManager.setDefaultExpiration(600); return cacheManager; } } ``` 4. 在需要缓存的方法上添加@Cacheable注解 例如: ```java @Service public class UserService { @Autowired private UserRepository userRepository; @Cacheable(value = "userCache", key = "#id") public User getUserById(Long id) { Optional<User> optionalUser = userRepository.findById(id); return optionalUser.orElse(null); } } ``` @Cacheable注解会将方法的返回值缓存到Redis中,value属性指定缓存的名称,key属性指定缓存的键。 以上就是使用Spring Boot集成Redis缓存的步骤。注意,这里使用了默认的Redis连接工厂和Redis模板,如果需要更多的定制化配置,可以参考Spring Data Redis文档进行设置。 ### 回答2: Spring Boot 是一个用于快速构建 Java 应用程序的开源框架。它简化了基于 Spring 框架的应用程序的创建和配置过程。而 Redis 是一种快速且高效的内存数据库,用于存储和检索数据。 在 Spring Boot使用 Redis 缓存可以提高应用程序的性能和响应速度。要使用 Redis 缓存,首先需要在项目的依赖中添加 Redis 相关的依赖项。然后,在应用程序的配置文件中配置 Redis 的连接信息,包括主机名、端口号、密码等。 一旦配置完成,就可以在应用程序中使用 @Cacheable 注解将方法标记为可缓存的。当调用被标记为缓存的方法时,Spring Boot 会首先检查缓存中是否已经存在该数据,如果存在则直接返回缓存中的数据,否则执行方法并将结果存入缓存。可以使用 @CacheEvict 注解来清除缓存中的数据,以便在数据发生变化时及时更新缓存使用 Redis 缓存还可以有其他一些高级特性,例如设置缓存的过期时间、使用不同的缓存键生成策略等。还可以通过配置 Redis 集群实现高可用和负载均衡。 总而言之,Spring Boot 提供了简单而强大的工具来集成 Redis 缓存,通过使用 Redis 缓存可以提高应用程序的性能和可伸缩性,减轻后端数据库的负载,从而提供更好的用户体验。 ### 回答3: Spring Boot使用Redis作为缓存的步骤如下: 1. 导入Redis依赖:在pom.xml文件中添加Spring Boot对Redis的依赖。 2. 配置Redis连接信息:在application.properties或application.yml文件中配置Redis的连接信息,包括主机名、端口号、密码等。 3. 创建RedisTemplate Bean:在Spring Boot的配置类中创建RedisTemplate Bean,用于操作Redis数据库。 4. 使用RedisTemplate进行缓存操作:在需要使用缓存的方法上添加注解@EnableCaching,然后在方法执行时,使用RedisTemplate进行缓存的读取和写入操作。 5. 添加缓存注解:在需要进行缓存的方法上添加注解@Cacheable,用于标记此方法的结果需要被缓存。可以通过设置缓存的key,来定制不同参数下的缓存策略。 6. 清除缓存:在需要清除缓存的方法上添加注解@CacheEvict,用于标记此方法执行后需要清除缓存。 通过以上步骤,Spring Boot就可以和Redis进行连接,并使用Redis作为缓存来提高应用程序的性能。在缓存读取时,先从Redis中获取数据,如果Redis中不存在,则从数据库中读取,然后将读取到的数据写入Redis中;在缓存写入时,先将数据写入Redis中,再同步写入数据库。这样可以大大提高读取数据的速度,并减轻数据库的压力。同时,Spring Boot提供了灵活的缓存策略配置,可以根据业务需求来定制缓存的命中规则和过期时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值