001-spring cache 简介

一、概述

  参看地址:

  自3.1版以来,Spring Framework提供了对现有Spring应用程序透明地添加缓存的支持。与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小。

  从Spring 4.1开始,通过JSR-107注释和更多定制选项的支持,缓存抽象得到了显着改善。

二、了解缓存抽象

  注意区别:cache buffer

  术语“缓冲区”和“缓存”倾向于交替使用;但请注意它们代表不同的事物。传统上,缓冲区被用作快速实体和慢速实体之间数据的中间临时存储。由于一方不得不等待其他影响性能,缓冲区通过允许整个数据块立即移动而不是小块来减轻这种影响。数据只能从缓冲区写入和读取一次。此外,至少有一方知道缓冲区是可见的。
  另一方面,根据定义,高速缓存是隐藏的,双方都不知道高速缓存发生了。它还提高了性能,但是通过允许以快速方式多次读取相同的数据来实现这一点。

  更多查看:地址

  其核心是抽象将缓存应用于Java方法,从而减少基于缓存中可用信息的执行次数。就是说,每次调用目标方法时,抽象都会应用缓存行为来检查方法是否已经为给定参数执行过。如果有,则返回缓存的结果而不必执行实际的方法;如果没有,则执行方法,将结果缓存并返回给用户,以便下次调用该方法时,将返回缓存的结果。这样,对于给定的一组参数,昂贵的方法(无论是CPU还是IO绑定)只能执行一次,并且结果可以重新使用,而无需再次实际执行该方法。缓存逻辑是透明应用的,对调用者没有任何干扰。

  显然,这种方法只适用于保证为给定输入(或参数)返回相同输出(结果)的方法,无论它执行多少次。

  其他与缓存相关的操作由抽象提供,例如更新缓存内容或删除所有条目中的一个。如果缓存处理在应用程序过程中可以更改的数据,这些将很有用。

  就像Spring框架中的其他服务一样,缓存服务是一种抽象(而不是缓存实现),并且需要使用实际存储来存储缓存数据 - 也就是说,抽象使开发人员不必编写缓存逻辑,但不提供实际的stores。这个抽象由org.springframework.cache.Cache和org.springframework.cache.CacheManager接口实现。

  抽象实现有几个:基于JDK java.util.concurrent.ConcurrentMap的缓存,Ehcache 2.x,Gemfire缓存,Caffeine和符合JSR-107的缓存(例如Ehcache 3.x)。

  注意:缓存抽象没有对多线程和多进程环境进行特殊处理,因为这些功能是由缓存实现处理的。 。

  如果您有多进程环境(即部署在多个节点上的应用程序),则需要相应地配置缓存提供程序。根据您的使用情况,在多个节点上复制相同的数据可能就足够了,但如果在应用程序过程中更改数据,则可能需要启用其他传播机制。

  缓存一个特定的项目与典型的get-if-not-found-then-proceed-and-put-finally代码块直接相当于程序缓存交互:不应用锁,并且多个线程可能会尝试同时加载相同的项目。驱逐也是如此:如果有几个线程试图同时更新或驱逐数据,则可以使用陈旧的数据。

  要使用缓存抽象,开发人员需要关注两个方面:缓存配置 - 数据存储和读取的后备缓存

猜你喜欢

转载自www.cnblogs.com/bjlhx/p/9166804.html