目录
1、Spring缓存简介
缓存作为一种优化技术,能够存储经常使用的数据或存储数据以使后续访问计算更快,缓存能够有效缩短操作的耗时,例如数据库调用或读写等。而Spring提供了强大的缓存框架,可以通过多种方式对应用程序进行缓存。使用Spring缓存,开发者可以轻松地引入缓存技术并且有效地提高应用程序的性能。
它是基于Java ConcurrentHashMap,这意味着它是线程安全的并且适合大多数单实例应用程序。
图片来源:5、Spring Boot缓存-布布扣-bubuko.com
2、Spring的缓存框架
主要包括三个部分:缓存管理器、缓存注解和缓存接口。
2.1 缓存管理器
缓存管理器是Spring缓存框架中的核心部分,用于管理缓存对象,以及创建、删除和查询缓存。Spring提供了多种缓存管理器的实现类,例如:
- ConcurrentMapCacheManager:基于Java ConcurrentMap实现的缓存管理器。
- RedisCacheManager:基于Redis缓存实现的缓存管理器。需要引入
spring-data-redis
依赖。 - EhCacheCacheManager:基于Ehcache实现的缓存管理器。需要引入
ehcache
依赖。
2.2 ⭐缓存注解
缓存注解是一组在Spring中定义的用于增强应用程序性能的注解,主要包括以下几个:
图片来源:5、Spring Boot缓存-布布扣-bubuko.com
@Cacheable
:触发方法执行前先查看缓存中是否有结果,如果有则返回缓存数据,否则执行方法并将方法的返回值存储到缓存中。
该@Cacheable注释告诉 Spring 将方法的返回值存储在指定的缓存中。后续使用相同参数调用此方法将从缓存中获取结果,而不是执行该方法。
相关参数:
value或cacheNames: 存储结果的缓存的名称。
key: 用于动态计算密钥的 SpEL 表达式。
condition: SpEL 表达式,确定是否应缓存该方法。
@CachePut
:表示无论什么情况下都执行方法,并将结果存储到缓存中。它非常适合更新资源的方法,能够确保缓存始终是最新的。 此外,也可以与缓存行为相结合@CacheEvict或@Cacheable提供更广泛的缓存行为。
//@Cacheable(cacheNames = "findAllUsers") //第一次查询完就放入缓存
@CachePut(cacheNames = "findAllUsers") //每次查询每次进缓存
@Override
public List<User> findAllUsers() {
return userDao.findAll();
}
@CacheEvict
:表示从缓存中删除一个或多个条目,以便在下一次查询时重新加载新鲜的数据。它是为了在特定操作下,使缓存保持最新。
相关参数:
allEntries: 如果设置为true,它将清除指定缓存中的所有条目。
beforeInvocation: 如果设置为true,则会在方法执行之前清除缓存。
@CacheEvict(cacheNames = "findAllUsers",key = "#id")
@Override
public void deleteUser(Long id) {
userDao.deleteById(id);
}
2.3 缓存接口
缓存接口是Spring提供的用于访问缓存系统的接口,包括以下几个:
- Cache:表示用于缓存方法结果的缓存器。
- CacheManager:表示管理一组缓存器的接口。
- CacheResolver:表示解析缓存名称并返回对应的缓存实例的接口。
3、使用Spring缓存的基本步骤
- 添加缓存管理器。
- 在启动类上添加@EnableCaching注解开启缓存功能
- 在需要缓存的方法上添加缓存注解(如@CacheEvict,@CachePut,@Cacheable)。
- 调用被注解的方法。如果缓存中没有数据,则会执行方法并将结果存储到缓存中;否则直接返回缓存中的数据。
以上是Spring缓存的简单介绍和使用步骤。
参考:
Spring中@Cacheable、@CacheEvict以及其他缓存相关注解的实用介绍 - 知乎
5、Spring Boot缓存-布布扣-bubuko.com
————————————————————————————————————
感谢阅读,码字不易,多谢点赞!如有不当之处,欢迎反馈指出,感谢!