Spring Boot 中提供了三个注解来支持缓存功能,分别是:
@CachePut
、@Cacheable
、和 @CacheEvict
。
@CachePut
@CachePut
注解表示在方法执行之后,将结果缓存起来。它通常用于新增或更新操作,并将操作结果缓存起来。该注解的参数包括value
,是缓存名称,和key
,表示缓存的 key 值。例如:
在这个例子中,我们将使用名为 books的缓存来存储用户对象。缓存 key 的值是书籍的 ID。当使用
createUser()
方法创建书籍时,会将方法的返回值缓存起来。
@Cacheable
@Cacheable
注解表示先从缓存中查找数据,如果查找到,则直接返回缓存中的数据,否则执行方法并将结果缓存起来。该注解的参数包括value
,是缓存名称,和key
,表示缓存的 key 值。例如:
在这个例子中,我们使用名为 books的缓存来存储书籍对象。当调用
getBookById()
方法查找书籍时,首先尝试从缓存中查找与id
对应的数据。如果成功查找到,则直接返回缓存中的数据;否则执行方法,并将方法的返回值缓存起来。
@CacheEvict
@CacheEvict
注解表示删除缓存中的数据。该注解的参数包括value
,是缓存名称,和key
,表示缓存的 key 值。例如:
在这个例子中,我们使用名为 books的缓存来存储书籍对象。当调用
deleteBookById()
方法删除书籍时,会将缓存中与id
对应的数据删除掉。
@EnableCaching
它用于开启缓存功能,通过作用于缓存配置类或Spring Boot启动类上,从而使得Spring应用能够利用缓存进行优化。
在原理上,Spring的缓存功能主要是通过AOP(面向切面编程)实现的。通过在需要使用缓存的Bean上创建代理对象,代理对象在目标方法执行时能够拦截方法的执行,从而实现缓存功能。
具体来说,当一个标注了@EnableCaching的配置类或启动类启动时,Spring会创建一个代理对象,该代理对象会包含一个拦截器。拦截器的主要任务是在目标方法执行前后拦截并处理缓存相关的操作。