【SpringBoot篇】使用Spring Cache高效处理缓存数据

文章目录

  • 🌹简述Spring Cache
  • 🏳️‍🌈常用注解
  • 🌺使用SpringCache
    • 🛸@Cacheable注解
      • ⭐测试
    • 🛸@CacheEvict
      • 🎍一次清理一条数据
      • 🎍一次删除多条数据

在这里插入图片描述
Spring Cache是一个框架,只要简单加一个注解,就能实现缓存功能。Spring Cache是Spring Framework提供的一个模块,它为应用程序添加了缓存支持。通过使用Spring Cache,你可以在方法级别上定义缓存规则,将方法的返回结果缓存起来,以提高方法调用的性能和响应速度。

🌹简述Spring Cache

是一个框架,只要简单加一个注解,就能实现缓存功能
Spring Cache 是 Spring Framework 提供的一个模块,它为应用程序添加了缓存支持。通过使用 Spring Cache,你可以在方法级别上定义缓存规则,将方法的返回结果缓存起来,以提高方法调用的性能和响应速度。

Spring Cache 的主要特点和功能包括:

注解驱动:Spring Cache 基于注解,通过在方法上添加 @Cacheable、@CachePut、@CacheEvict 等注解,来定义缓存规则和行为。

支持多种缓存实现:Spring Cache 支持多种常见的缓存实现,包括 Ehcache、Redis、Caffeine、ConcurrentMap 等,你可以根据自己的需求选择合适的缓存提供者。

灵活的缓存配置:你可以通过配置文件或者 Java 代码来灵活地配置缓存管理器、缓存的过期时间、缓存的键生成策略等。

支持条件化的缓存操作:除了基本的缓存注解外,Spring Cache 还支持条件化的缓存操作,比如通过 SpEL 表达式来定义条件,决定是否执行缓存操作。

总之,Spring Cache 提供了一种便捷的方式来实现方法级别的缓存,使得开发者可以专注于业务逻辑的实现,而不必过多关注缓存的管理和维护。这样可以有效地提升应用程序的性能,并减少对底层缓存实现的耦合。

🏳️‍🌈常用注解

请添加图片描述

@Cacheable:触发将方法返回结果缓存。
@CacheEvict:触发从缓存中清除一条或多条数据。
@CachePut:触发将方法返回结果更新到缓存。
@Caching:组合多个缓存注解在一个方法上。
@CacheConfig:在类级别共享缓存注解的通用配置。

🌺使用SpringCache

使用SpringCache需要把下面的代码导入到pom文件中

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
            <version>2.7.3</version>
        </dependency>

这样子我们就可以使用SpringCache了

我们打开下面链接里面的文件,我们下面要使用文件中的代码进行讲解
我用夸克网盘分享了「springcache-demo.zip」,点击链接即可保存。打开「夸克APP」 链接:https://pan.quark.cn/s/571a45c464d6

我们首先来启动Redis服务
在这里插入图片描述

CacheDemoApplication.java

在启动类上加上这个注解,开启缓存注解功能

@EnableCaching

在这里插入图片描述

🛸@Cacheable注解

进入controller包
UserController.java

加入下面的注解

@CachePut

插入数据的同时,我们还需要把数据保存到Redis中一份
在这里插入图片描述

⭐测试

我们启动项目,输入http://localhost:8888/doc.html打开接口文档进行测试
在这里插入图片描述
发现发送成功,我们去查看数据库,发现数据库已经插入了一条数据了

我们打开Redis Desktop Manager,连接成功后,发送数据
发现

user5对象已经进行了序列化
请添加图片描述

🛸@CacheEvict

🎍一次清理一条数据

如果我们把数据库中的数据给删除掉了,那么对应的缓存数据我们也应该删除,下面我们就来使用@CacheEvict注解来删除缓存数据
我们加上这一段代码

@CacheEvict(cacheNames = "userCache",key = "#id")

然后启动项目
在这里插入图片描述
输入http://localhost:8888/doc.html打开接口文档进行测试

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

查询数据库,发现数据库里面对应id=2的字段被删除了
Redis缓存也删除了

🎍一次删除多条数据

我们在deleteAll这个方法中进行操作
仍然加上@CacheEvict注解

@CacheEvict(cacheNames = "userCache",allEntries = true)

在这里插入图片描述
使用接口文档http://localhost:8888/doc.html发送数据,就可以删除所有缓存了

本文介绍了Spring Cache的常用注解及示例,让大家快速上手Spring Cache的使用。Spring Cache是一个非常强大的缓存框架,能够通过简单的注解就实现缓存,大大简化了我们的开发工作。希望本文对大家有所帮助,如果还有疑问,欢迎在评论区交流。

在这里插入图片描述

  • 113
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 189
    评论
使用SpringCache和Redis可以很方便地实现数据缓存,下面是具体的步骤: 1. 配置Redis 首先需要在项目中引入Redis相关的依赖,如下: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 然后在application.properties文件中配置Redis的连接信息,如下: ```properties spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=123456 ``` 2. 配置SpringCacheSpringBoot中,可以使用@Cacheable、@CachePut、@CacheEvict等注解来实现缓存,但是需要配置一个CacheManager来管理缓存。可以使用RedisCacheManager来管理Redis缓存,如下: ```java @Configuration @EnableCaching public class CacheConfig extends CachingConfigurerSupport { @Bean public RedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName("127.0.0.1"); jedisConnectionFactory.setPort(6379); jedisConnectionFactory.setPassword("123456"); return jedisConnectionFactory; } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory()); redisTemplate.setDefaultSerializer(new StringRedisSerializer()); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } @Bean public CacheManager cacheManager() { RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); RedisCacheManager redisCacheManager = RedisCacheManager.builder(redisConnectionFactory()) .cacheDefaults(redisCacheConfiguration) .transactionAware() .build(); return redisCacheManager; } } ``` 其中,redisConnectionFactory方法是用来创建Redis连接的,redisTemplate方法是用来进行Redis操作的,cacheManager方法是用来创建RedisCacheManager的。 3. 使用缓存 有了上面的配置之后,就可以在项目中使用缓存了。例如,我们可以对一个方法进行缓存,如下: ```java @Service public class UserService { @Autowired private UserRepository userRepository; @Cacheable(value = "userCache", key = "#id") public User getUserById(Long id) { System.out.println("getUserById from DB"); return userRepository.findById(id).orElse(null); } } ``` 在这个例子中,我们使用了@Cacheable注解将getUserById方法进行了缓存,value属性表示缓存的名称,key属性表示缓存的键值。如果缓存中已经有了对应的数据,则直接从缓存中获取数据,否则就从数据库中获取数据,并将数据加入到缓存中。 4. 清除缓存 有时候需要从缓存中清除某些数据,可以使用@CacheEvict注解来实现,如下: ```java @Service public class UserService { @Autowired private UserRepository userRepository; @Cacheable(value = "userCache", key = "#id") public User getUserById(Long id) { System.out.println("getUserById from DB"); return userRepository.findById(id).orElse(null); } @CacheEvict(value = "userCache", key = "#id") public void deleteUserById(Long id) { userRepository.deleteById(id); } } ``` 在这个例子中,我们使用了@CacheEvict注解将deleteUserById方法进行了缓存清除,value属性表示缓存的名称,key属性表示缓存的键值。如果有对应的数据,则从缓存中清除该数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 189
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下小吉.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值