我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring框架学习之Cache抽象详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring框架学习之Cache抽象详解

 官方文档  8.0

Spring为不同缓存做了一层抽象,这里通过阅读文档以及源码会对使用以及原理做一些学习笔记。

1.简介

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

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

cache和buffer

从术语上看,"buffer"和"cache",可以互相被替换.但是,他们确实代表着不同的事情.

传统上,一个buffer被用来作为快数据和慢数据之间的临时存储.因为快速的一方需要等待慢的一方(会影响性能),buffer通过允许整块数据一次移动而不是一小块数据一点一点移动来缓解压力. 这个数据只会从buffer中被写入或者读出一次.此外,buffers对总对一方可以见.

Cache,则相反,通过定义,隐藏,并且不会让对方意识到它的存在.它同样提高性能,但是这是让相同数据在同时以快速的方式被多次读取来实现的.

2.缓存抽象

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

缓存抽象提供了其他缓存相关的操作,比如更新缓存的内容或者删除一个或者全部.如果缓存在处理数据的过程中经常改变,这些操作将非常有用.

就像Spring Framework中的其他服务一样,缓存服务是一种抽象(不是缓存实现),需要使用实际存储来存储缓存数据 - 也就是说,抽象使开发人员不必编写缓存相关逻辑,但它也不提供实际的数据存储能力。

通过接口 org.springframework.cache.Cache(缓存)

和org.springframework.cache.CacheManager(缓存管理器)  实现缓存的抽象

这个抽象的一些实现可以直接使用:基于JDK java.util.concurrent.ConcurrentMap的缓存(即默认的缓存是基于JVM的ConcurrentMap),Ehcache 2.x,Gemfire缓存,Caffeine,符合和JSR-107的缓存(例如Ehcache 3.x)。 有关插入其他缓存存储/提供程序的更多信息,请参阅插入不同的后端缓存。

3.spring缓存抽象与多进程

注意的是:

Spring的缓存抽象没有特别处理多线程或者多进程,这些都是缓存的实现来处理的。

如果你有多进程环境(一个应用部署在多个节点上),你需要配置相应地提供你缓存的程序.根据你的用例,从多个节点上拷贝相通数据就足够了.然而,如果在应用的过程中修改了数据,则需要有其他的机制来通知修改.

缓存一个专门的对象是一个与典型的get-if-not-found-then- proceed-and-put-eventually代码块等价,是通过编程缓存交互找到.没有锁被使用,多个线程并发的获取相同的数据.删除(eviction)也同样如此.如果多个线程尝试并发的更新或者删除数据,你也许就使用了过时(stale)的数据.一些缓存提供方提供了更加高级的特性.从文档中可以看到更多的细节.

使用缓存你需要从两方面看起:

  • 声明缓存:确认需要被缓存的方法还有他们使用的策略
  • 配置缓存: 存储数据然后把数据读到缓存中.

以上就是Spring框架学习之Cache抽象详解的详细内容,更多关于Spring框架Cache抽象的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring框架学习之Cache抽象详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JAVA学习之一步步搭建spring框架

前言作为一个服务端开发感觉一直挺排斥框架这种东西的,总觉得什么实现逻辑都帮你封装在里面了,你只需要配置这配置那个,出了问题也不知道怎么排查,之前即使写web程序也宁愿使用jetty这样的嵌入式的web server实现,自己写servlet
2023-05-31

学习canvas框架 详解常用的canvas框架

探索Canvas框架:了解常用的Canvas框架有哪些,需要具体代码示例引言:Canvas是HTML5中提供的一个绘图API,通过它我们可以实现丰富的图形和动画效果。为了提高绘图的效率和便捷性,许多开发者开发了不同的Canvas框架。本文
学习canvas框架 详解常用的canvas框架
2024-01-17

spring学习教程之@ModelAttribute注解运用详解

本文主要给大家介绍了关于java中@ModelAttribute使用的相关资料,分享出来供大家参考学习,下面来一起看看详细的介绍:一、@ModelAttribute注释方法 例子(1),(2),(3)类似,被@ModelAttribute注
2023-05-31

Spring框架AOP基础之代理模式详解

代理模式(ProxyParttern)为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象。本文将通过示例详细讲解一下这个模式,需要的可以参考一下
2022-11-13

详解Spring学习之编程式事务管理

前言在前面的内容,基本已经学习了事务的基本概念以及事务隔离级别等,接下来的几个小节,将学习怎么使用Spring进行事务管理,在Spring中,对事务进行管理有多种方法,主要分别编程式和声明式,本小节主要学习编程式事务管理,后面讲学习Spri
2023-05-31

spring学习之参数传递与检验详解

前言Spring是于2003 年兴起的一个轻量级的Java 开发框架,非常受现在开发者的喜爱,下面这篇文章主要给大家介绍了关于spring参数传递与检验的相关内容,分享出供大家参考学习,下面来一起看看详细的介绍:一、背景在spring请求时
2023-05-31

Spring Boot学习入门之AOP处理请求详解

前言面向切面(AOP)Aspect Oriented Programming是一种编程范式,与语言无关,是一种程序设计思想,它也是spring的两大核心之一。在spring Boot中,如何用AOP实现拦截器呢?首先加入依赖关系:
2023-05-31

详解Spring框架之基于Restful风格实现的SpringMVC

如果说现在你要做一个系统,假设说有一个模块属于公告管理,那么我们可能安排路径的时候会这样安排NewsAction路径: 增加新闻:/pages/back/admin/news/add.action; 新闻列表:/pages/back/adm
2023-05-31

Spring Boot学习入门之统一异常处理详解

前言关于之前的一篇所讲到的表单验证中提到,如果产生错误,可以得到错误的信息,但是返回值的问题却没有考虑。其中所提到的Controller:@RequestMapping(value = "/doRegister", method = Req
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录