当前位置:网站首页 > Java教程 > 正文

java缓存框架教程



本文将带你了解如何使用 Spring Cache 来提高系统性能。

Spring 提供的核心缓存抽象位于 spring-context 模块中。

另外,还有一个名为 spring-context-support 的模块,它位于 spring-context 模块之上,并提供了更多由 EhCacheCaffeine 支持的 。如果想使用这些模块作为缓存存储,则需要使用 spring-context-support 模块:

由于 spring-context-support 模块临时依赖于 spring-context 模块,因此 spring-context 不需要单独的依赖声明。

如果是 Spring Boot 项目,可以利用 spring-boot-starter-cache Starter 来轻松添加缓存依赖项:

该 Starter 包含了 spring-context-support 模块。

只需在任何配置类中添加 注解,即可启用缓存功能:

当然,也可以通过 XML 配置来启用缓存:

注意:启用缓存后,必须注册一个 ,这是最基本的设置。

在使用 Spring Boot 时,只需在 classpath 上存在 Starter 依赖,并且与 注解一起使用,就会注册相同的 ,因此不需要单独的 Bean 声明。

还可以使用一个或多个 Bean 来自定义 自动配置 的 :

自动配置会获取到这些 Customizer,并在完成初始化之前将其应用到当前的 中。

启用缓存后,下一步就是通过声明性注解将缓存行为绑定到方法上。

为方法启用缓存行为的最简单方法是用 对其进行注解,它会将方法返回结果存储在注解指定的缓存中:

调用将首先检查缓存 addresses,然后才实际调用该方法并缓存结果。

虽然在大多数情况下一个缓存就足够了,但 Spring 也支持传递多个缓存:

在这种情况下,如果任何缓存中包含所需的结果,就会返回该结果,而不会调用该方法。

缓存的数据如果不进行清理,会保留大量陈旧或未使用甚至是过期的数据。

可以使用 注解来表示删除一个、多个或所有的值,以刷新缓存:

如上,使用参数 与要清空的缓存结合使用;这将清除缓存 addresses 中的所有条目。

使用 注解,可以更新缓存的内容,而不会影响方法的执行。也就是说,方法始终会被执行并将结果缓存起来:

和 的区别在于, 会跳过运行方法,而 会实际运行方法,然后将结果放入缓存。

如果想使用同一类型的多个注解来缓存一个方法,该怎么办?

来看一个错误的例子:

上述代码无法编译,因为 Java 不允许为一个给定的方法声明多个相同类型的注解。

解决上述问题的办法是:

如上面的代码片段所示,可以用 对多个缓存注解进行分组,并用它来实现自己定制的缓存逻辑。

通过 注解,可以将部分缓存配置精简到类级的一个地方,这样就不必多次声明了:

有时,缓存并不是在所有情况下都适用于某种方法。

重用 注解中的示例,这会既执行方法,又缓存结果。

如果想对注解激活的条件进行更多控制,可以用 参数定义一个 SpEL 表达式,框架会根据该表达式的计算结果进行缓存:

在 表达式中可以通过 访问方法参数。

还可以通过 参数,根据方法的返回值而不是参数值来控制缓存:

除非返回的地址短于 64 个字符,否则上述注解将缓存地址。

和 参数可与所有缓存注解结合使用。

事实证明,这种条件缓存对管理大型结果非常有效。它还有助于根据方法参数自定义行为,而不是对所有操作强制执行通用行为。

如果无法访问应用的源码,或者想从外部注入缓存行为,也可以使用基于 XML 的声明式缓存。

XML 配置如下:

下面是相应的 Java 配置:

如下:

本文介绍了如何使用 Spring Cache 抽象来实现声明式缓存以及如何通过缓存注解的 和 属性来灵活地控制缓存条件。


Ref:

  • 上一篇: java使用教程pdf
  • 下一篇: java教程pdf豆丁
  • 版权声明


    相关文章:

  • java使用教程pdf2024-12-08 08:18:04
  • java468教程2024-12-08 08:18:04
  • java对象引用教程2024-12-08 08:18:04
  • java菜鸟教程api2024-12-08 08:18:04
  • java桌球制作教程2024-12-08 08:18:04
  • java教程pdf豆丁2024-12-08 08:18:04
  • java开发eclipse安装教程2024-12-08 08:18:04
  • java后胆安装教程2024-12-08 08:18:04
  • java291集教程2024-12-08 08:18:04
  • java程序破解教程2024-12-08 08:18:04