摘要:理解缓存抽象缓存与缓冲区术语缓冲区和缓存往往可以互换使用,但是请注意,它们代表不同的东西。这个抽象是由和接口实现。要使用缓存抽象,你需要考虑两个方面缓存声明标识需要缓存的方法及其策略。缓存配置存储数据并从中读取数据的后备缓存。
理解缓存抽象
缓存与缓冲区术语“缓冲区”和“缓存”往往可以互换使用,但是请注意,它们代表不同的东西。传统上,缓冲区用作数据在快实体和慢实体之间的中间临时存储,由于一方必须等待另一方(这会影响性能),缓冲区允许整个数据块(而不是小块)同时移动,从而缓解了这种情况。数据只从缓冲区写入和读取一次,此外,至少有一方知道缓冲区是可见的。
另一方面,缓存根据定义是隐藏的,并且任何一方都不知道缓存的发生,它还提高了性能,但是通过让相同的数据以快速方式多次读取来提高性能。
你可以在这里找到关于缓冲区和缓存之间差异的进一步解释。
缓存抽象的核心是将缓存应用于Java方法,从而根据缓存中可用的信息减少执行的次数,也就是说,每次调用目标方法时,抽象都会应用缓存行为,检查给定参数的方法是否已经执行。如果已执行,则返回缓存的结果,而不必执行实际的方法,如果方法尚未执行,则执行该方法,并缓存结果并返回给用户,以便在下次调用该方法时返回缓存的结果。这样,对于给定的一组参数,昂贵的方法(无论是CPU绑定的还是IO绑定的)只能执行一次,并且结果可以重用,而不必实际再次执行该方法,缓存逻辑被透明地应用,没有任何对调用程序的干扰。
这种方法只适用于保证为给定输入(或参数)返回相同输出(结果)的方法,无论执行了多少次。
缓存抽象提供了其他与缓存相关的操作,比如更新缓存内容或删除一个或所有条目的能力,如果缓存处理的数据在应用程序运行过程中可能发生更改,那么这些方法非常有用。
与其他在Spring Framework中的服务,缓存服务是一个抽象(不是缓存实现),需要使用实际的存储来存储缓存数据 — 也就是说,抽象使你不必写缓存逻辑但不提供实际的数据存储。这个抽象是由org.springframework.cache.Cache和org.springframework.cache.CacheManager接口实现。
Spring提供了该抽象的一些实现:JDK 基于缓存的java.util.concurrent.ConcurrentMap、Ehcache 2.x、Gemfire缓存、Caffeine和JSR-107兼容缓存(例如Ehcache 3.x)。
缓存抽象对多线程和多进程环境没有特殊的处理,因为这些特性是由缓存实现来处理的。
如果你有一个多进程环境(即部署在多个节点上的应用程序),则需要相应地配置缓存提供程序,根据你的用例,在多个节点上复制相同的数据就足够了,但是,如果在应用程序过程中更改数据,则可能需要启用其他传播机制。
缓存特定的项与通过编程缓存交互找到的典型get-if-not-found-then- proceed-and-put-eventually代码块是直接等价的,没有应用锁,几个线程可能试图同时加载相同的项,这同样适用于驱逐。如果多个线程试图同时更新或驱逐数据,则可以使用陈旧数据,某些缓存提供程序在该领域提供高级特性,有关详细信息,请参阅缓存提供程序的文档。
要使用缓存抽象,你需要考虑两个方面:
缓存声明:标识需要缓存的方法及其策略。
缓存配置:存储数据并从中读取数据的后备缓存。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/76065.html
摘要:注解从版开始,的缓存抽象完全支持标准注解和以及和。使用方法调用的结果更新缓存,要求将其作为使用注解的参数传递给它由于这种差异,允许在实际方法调用之前或之后更新缓存。非常相似,当方法调用导致异常时,支持条件驱逐。 JCache(JSR-107)注解 从4.1版开始,Spring的缓存抽象完全支持JCache标准注解:@CacheResult、@CachePut、@CacheRemove和...
摘要:声明式基于注解的缓存对于缓存声明,的缓存抽象提供了一组注解触发缓存人口。重新组合要应用于方法的多个缓存操作。虽然在大多数情况下,只声明一个缓存,但是注解允许指定多个名称,以便使用多个缓存。 声明式基于注解的缓存 对于缓存声明,Spring的缓存抽象提供了一组Java注解: @Cacheable:触发缓存人口。 @CacheEvict:触发缓存驱逐。 @CachePut:在不影响...
摘要:容器概述接口表示容器,负责实例化配置和组装。基于的元数据不是惟一允许的配置元数据形式,容器本身与实际编写配置元数据的格式完全解耦,现在,许多开发人员为他们的应用程序选择基于的配置。 容器概述 org.springframework.context.ApplicationContext接口表示Spring IoC容器,负责实例化、配置和组装bean。容器通过读取配置元数据获取关于要实例化...
摘要:除了,还简单介绍了对的支持,可以帮助应用将散落在各处的逻辑汇集于一处切面。当装配的时候,这些切面能够运行期编织起来,这样就能呢个非常有效的赋予新功能。 第1章 Spring之旅 说明 1、本文参考了《Spring 实战》重点内容,参考了GitHub上的代码 2、每个人的学习方式不一样,但目的是一样的,活学活用。最近一直在听《我们不一样》 3、本文只为记录作为以后参考,要想真正领悟Sp...
摘要:除此之外,还为不同的应用程序体系结构提供了基础支持,包括消息传递事务数据和持久性以及,它还包括基于的框架,以及与之并行的反应性框架。还支持依赖项注入和公共注解规范,应用程序开发人员可以选择使用这些规范,而不是提供的特定于的机制。 概述 Spring使创建Java企业应用程序变得很容易,它提供了在企业环境中使用Java语言所需要的一切,支持Groovy和Kotlin作为JVM上的替代语言...
阅读 3816·2021-11-18 13:19
阅读 1169·2021-10-11 10:58
阅读 3278·2019-08-29 16:39
阅读 3130·2019-08-26 12:08
阅读 2026·2019-08-26 11:33
阅读 2453·2019-08-23 18:30
阅读 1298·2019-08-23 18:21
阅读 2515·2019-08-23 18:18