Spring框架学习之Cache抽象详解

目录
  • 1.简介
    • cache和buffer
  • 2.缓存抽象
  • 3.spring缓存抽象与多进程

官方文档  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抽象的资料请关注我们其它相关文章!

(0)

相关推荐

  • Spring Cache的基本使用与实现原理详解

    Spring Cache 概念 从Spring 3.1版本开始,提供了一种透明的方式来为现有的Spring 应用添加cache,使用起来就像@Transaction一样.在应用层面与后端存储之间,提供了一层抽象,这层抽象目的在于封装各种可插拔的后端存储( Ehcache Guava Redis),最小化因为缓存给现有业务代码带来的侵入. Spring 的缓存技术还具备相当的灵活性.不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 cond

  • Spring 缓存抽象示例详解

    Spring缓存抽象概述 Spring框架自身并没有实现缓存解决方案,但是从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口,提供对缓存功能的声明,能够与多种流行的缓存实现集成. Cache接口为缓存的组件规范定义,包含缓存的各种操作集合: Cache接口下Spring提供了各种xxxCache的实现:如RedisCache,EhCacheCache , ConcurrentMapCa

  • Spring Cache相关知识总结

    简介 Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术: 并支持使用 JCache ( JSR-107 )注解简化我们开发: Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合: Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现 : 如 RedisCache , EhCacheCache ,

  • 深入理解Spring Cache框架

    本文是缓存系列第三篇,前两篇分别介绍了 Guava 和 JetCache. 前两篇我们讲了 Guava 和 JetCache,它们都是缓存的具体实现,今天给大家分析一下 Spring 框架本身对这些缓存具体实现的支持和融合.使用 Spring Cache 将大大的减少我们的Spring项目中缓存使用的复杂度,提高代码可读性.本文将从以下几个方面来认识Spring Cache框架. 背景 SpringCache 产生的背景其实与Spring产生的背景有点类似.由于 Java EE 系统框架臃肿.低

  • Spring框架学习之Cache抽象详解

    目录 1.简介 cache和buffer 2.缓存抽象 3.spring缓存抽象与多进程 官方文档  8.0 Spring为不同缓存做了一层抽象,这里通过阅读文档以及源码会对使用以及原理做一些学习笔记. 1.简介 从3.1版开始,Spring Framework提供了对现有Spring应用程序透明地添加缓存的支持. 与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小. 从Spring 4.1开始,通过JSR-107注释和更多自定义选项的支持,缓存抽象得到了显着改进. ca

  • Spring框架IOC容器底层原理详解

    目录 1.什么是IOC 2.IOC容器的底层原理 3.那么上边提到的三种技术如何实现IOC的呢 4.IOC(接口) 1.什么是IOC IOC – Inverse of Control,控制反转,将对象的创建权力反转给Spring框架! 在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题. Spring 将创建对象的权利给了IO

  • Spring框架对于Bean的管理详解

    目录 什么是Bean管理 Bean管理操作的两种方式 基于注解的方式实现Bean管理和注入属性(常用) 1.什么是注解 2.Spring针对Bean管理中创建对象提供的注解 3.用注解的方式创建对象 4.用注解的方实现属性注入 什么是Bean管理 bean管理指的是如下的两个操作. 1.创建对象 2.注入属性 Bean管理操作的两种方式 1.基于xml配置文件的方式实现 2.基于注解方式实现 基于注解的方式实现Bean管理和注入属性(常用) 1.什么是注解 ①:注解是代码特殊标记,格式:@注解名

  • Spring框架应用的权限控制系统详解

    Spring框架是一个优秀的多层J2EE系统框架,Spring本身没有提供对系统的安全性支持.Acegi是基于Spring IOC 和 AOP机制实现的一个安全框架.本文探讨了Acegi安全框架中各部件之间的交互,并通过扩展Acegi数据库设计来实现基于Spring框架的应用的安全控制方法. 一.引言 近年来,随着Internet技术的迅猛发展,计算机网络已深入到了人们的工作.学习和日常生活中,于是,怎样构建安全的web应用也成为了当前最热门的话题.Spring是一个基于IoC(Inversio

  • Spring框架JavaMailSender发送邮件工具类详解

    本文实例为大家分享了Spring框架JavaMailSender发送邮件工具类,供大家参考,具体内容如下 需要用到的jar包: 下面是发送工具类代码: package com.test.email; import org.springframework.core.io.FileSystemResource; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.Jav

  • Spring框架基于注解开发CRUD详解

    Spring框架基于注解开发CRUD,供大家参考,具体内容如下 1. Maven坐标 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-webmvc</artifactId>

  • Spring MVC学习教程之RequestMappingHandlerAdapter详解

    前言 RequestMappingHandlerAdapter实现了HandlerAdapter接口,顾名思义,表示handler的adapter,这里的handler指的是Spring处理具体请求的某个Controller的方法,也就是说HandlerAdapter指的是将当前请求适配到某个Handler的处理器.RequestMappingHandlerAdapter是HandlerAdapter的一个具体实现,主要用于将某个请求适配给@RequestMapping类型的Handler处理.

  • Spring MVC 学习 之 - URL参数传递详解

    在学习 Spring Mvc 过程中,有必要来先了解几个关键参数: @Controller: 在类上注解,则此类将编程一个控制器,在项目启动 Spring 将自动扫描此类,并进行对应URL路由映射. @Controller public class UserAction{ } @RequestMapping 指定URL映射路径,如果在控制器上配置 RequestMapping  ,具体请求方法也配置路径则映射的路径为两者路径的叠加 常用映射如:RequestMapping("url.html&q

  • 微信小程序wepy框架学习和使用心得详解

    一.微信小程序wepy框架简介: 微信小程序WePY框架是腾讯官方推出来的框架,类似的框架还有美团的mpvue,京东的Taro等; 目前公司开发小程序主要用到的是微信原生方法和官方的wepy框架; wepy框架在开发过程中参考了 Vue 等现有框架的一些语法风格和功能特性,对原生小程序的开发模式进行了再次封装,更贴近于 MVVM 架构模式, 并支持ES6/7的一些新特性.相对更容易上手,提高开发效率; 二.WePY项目的创建与目录结构 WePY的安装或更新都通过npm进行,全局安装或更新WePY

  • Spring框架学习之AOP详解

    一.概念 1.面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 2.通俗描述:不通过修改源代码方式,在主干功能里面添加新功能 二.底层原理:动态代理 有两种情况动态代理 2.1 有接口, JDK 动态代理 1.被代理的对象 public class UserDaoImpl implements UserDao { @Override public int add(int a, int b) {

随机推荐