首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

「性能提升」扩展 Spring Cache 支持多级缓存

为什么多级缓存 缓存引入是现在大部分系统所必须考虑 redis 作为常用中间件,虽然我们一般业务系统(毕竟业务量有限)不会遇到如下图 在随着 data-size 增大和数据结构复杂造成性能下降...来自未来本地内存缓存,性能比如常见内存缓存实现性能高出不少详细对比。...设计难点 目前大部分应用缓存都是基于 Spring Cache 实现,基于注解(annotation)缓存(cache)技术,存在问题如下: Spring Cache 仅支持 单一缓存来源,即:只能选择...数据一致性:各层缓存之间数据一致性问题,如应用层缓存和分布式缓存之前数据一致性问题。...缓存过期:Spring Cache 不支持主动过期策略 业务流程 [up-9177583c01457c66cd82e0696bc4accfb02.png] 如何使用 引入依赖 <dependency

1.5K10

「性能提升」扩展 Spring Cache 支持多级缓存

为什么多级缓存 缓存引入是现在大部分系统所必须考虑 redis 作为常用中间件,虽然我们一般业务系统(毕竟业务量有限)不会遇到如下图 在随着 data-size 增大和数据结构复杂造成性能下降...尤其在 微服务架构中,一次调用往往会涉及多次调用 例如pig oauth2.0 client 认证 ? Caffeine 来自未来本地内存缓存,性能比如常见内存缓存实现性能高出不少详细对比。...设计难点 目前大部分应用缓存都是基于 Spring Cache 实现,基于注解(annotation)缓存(cache)技术,存在问题如下: Spring Cache 仅支持 单一缓存来源,即:只能选择...数据一致性:各层缓存之间数据一致性问题,如应用层缓存和分布式缓存之前数据一致性问题。 缓存过期:Spring Cache 不支持主动过期策略 业务流程 ?... 0.0.1 开启缓存支持 @EnableCaching public class App {

67710
您找到你想要的搜索结果了吗?
是的
没有找到

玩转Spring Cache --- 扩展缓存注解支持失效时间TTL【享学Spring

前言 在上篇文章讲解整合分布式缓存Redis时埋下了一个伏笔:如何让我们缓存注解支持自定义TTL失效时间呢?...:Spring Cache抽象本省是并不支持Expire失效时间设定,我粗暴把它归为了Spring Cache抽象一个设计上bug,可参考文章:【小家Spring】玩转Spring Cache...它没有实现Expire,但好在第三方产品对Spring缓存标准实现时候,大都实现了这个重要失效策略,比如典型例子:RedisCache。...方式一:使用源生RedisCacheManager进行集中式控制 由于控制key失效时间这一块非常实用和重要,所以其实Spring Data Redis工程早就给与了支持(不管是1.x版本还是2....总结 本文主要介绍了让缓存注解支持TTL失效时间,提供两种方式都可以用在生产环境中。合理使用、控制失效时间,能让你应用更加高效,缓存利用得更合理。

8.2K81

扩展spring cache 支持缓存多租户及其自动过期

spring cache 概念 Spring 支持基于注释(annotation)缓存(cache)技术,它本质上不是一个具体缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用抽象...,通过在既有代码中添加少量它定义各种 annotation,即能够达到缓存方法返回对象效果。...默认情况 A租户入参为K1 请求 应用,spring cache 会自动缓存 K1 值,如果B租户 入参同时为K1 请求应用时,spring cache 还是会自动关联到同一个 Redis K1 上边查询数据...默认spring cache 根据入参来区分 不能满足多租户系统设计需求,不能实现根据租户隔离。 区分缓存增加租户标识 ?...里面的值,避免数据脏读,保证隔离型 重写Spring Cache cacheManager 缓存管理器 从上下文中获取租户ID,重写@Cacheable value 值即可完成,然后注入这个 cacheManager

1.6K10

扩展spring cache 支持缓存多租户及其自动过期

spring cache 概念 Spring 支持基于注释(annotation)缓存(cache)技术,它本质上不是一个具体缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使用抽象...,通过在既有代码中添加少量它定义各种 annotation,即能够达到缓存方法返回对象效果。...[20190321231751_2foAvG_cache1.jpeg] 默认情况 A租户入参为K1 请求 应用,spring cache 会自动缓存 K1 值,如果B租户 入参同时为K1 请求应用时...区分缓存增加租户标识 [20190321232708_WNE7UL_cache2.jpeg] A租户入参为K1 ,spring cache 维护Redis Key 在拼接一个租户信息重写Spring...cache 扩展即可实现对缓存 一些透明操作 cachemanager 是springcache 对外提供API 扩展入口 以上源码参考个人项目 基于Spring Cloud、OAuth2.0

1.3K20

spring缓存(cache)-分布式缓存

代码下载:https://gitee.com/hong99/spring/issues/I1N1DF 背景 继上文《spring缓存(cache)-本地》,本文实现集中式缓存(分布式); redis...Redis是一个开源(BSD许可),内存存储数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。...-- spring自己缓存管理器,这里定义了缓存位置名称 ,即注解中value --> <bean id="redisrCacheManager" class="com.hong.<em>spring</em>.utils.RedisCacheManager...redis在高可用、高并发、高性能基本都杠杠<em>的</em>,当然也引发<em>缓存</em>穿透、<em>缓存</em>击穿、<em>缓存</em>雪崩、热点数据等问题。

2K20

Spring缓存机制探索

但是如果我们代码需要部署很多个实例,那么这种本地cache就没有办法保持同步,这就让我想起了mybatis一级缓存和二级缓存。...但是考虑到spring项目的cache机制已经成型,因此我们最小成本对接新缓存就是重写spirngcache操作逻辑。...我们再看一下上边 RedisCacheConfiguration.class 我们看到我们只需要自己实现cacheManager接口,然后将类注册为cacheManager到spring中,并最终设置进...CacheRemoveAllInterceptor(this.getErrorHandler()); this.initialized = true; } 通过operation决策采用那种拦截器,进行缓存处理...而operation解析是在这里完成,如下图所示。 这一切拦截器调用源头是spring方法拦截器MethodInterceptor,这块可以看一下具体实现逻辑哈,这里就不写了。

30320

Spring Boot缓存介绍

Spring Boot是一个非常流行Java Web应用程序开发框架。它支持多种缓存技术,并为开发者提供了很多缓存相关配置选项和默认设置。...在本文中,我们将讨论Spring Boot缓存机制,包括其基本概念、使用方法和示例。什么是缓存缓存是一种用于提高系统性能和可扩展性技术。...Spring Boot缓存Spring Boot提供了一个非常方便缓存抽象层,它使得开发者可以很容易地集成多种缓存技术,如Ehcache、Redis、Guava等。...Cache是一个具体缓存实例,它提供了基本缓存操作,如添加、删除和查找。Spring Boot还提供了多种缓存注解,以便开发者可以在方法级别进行缓存。...return result;}除了默认缓存实现之外,Spring Boot还支持多种缓存技术。可以使用@EnableCaching注解cacheManager属性指定缓存管理器实现。

94740

spring缓存(cache)-(缓存穿透、缓存击穿、缓存雪崩、热点数据)

代码下载:https://gitee.com/hong99/spring/issues/I1N1DF 背景 继上文《spring缓存(cache)-分布式缓存》; 关于jmeter配置 jmeter...分布式缓存,非常高效提升了系统性能,但是可能引发以下问题。...解决方案 1.设置空值缓存; 注:当新增该数据时候需要将原来id,delete掉再放进去,刷新一下缓存否则会导致缓存数据与数据库不一致场景。 ?...解决方案 1.关键key不设过期时间(通过功能删除或更新); 2.添加本地缓存(需要考虑一致性问题),当redis失效直接通过本地缓存先坑一波..; 可以参考:spring缓存(cache)-本地...3.关键缓存可以设置不过期,当更新时再同步更新就可以了;(同上) 4.同缓存击穿一样,添加分布式式进行完善; 最后 缓存穿透、缓存击穿、缓存雪崩、热点数据这几个问题在业界还是挺常见,挺多系统由于开始业务量没那么大加之研发没有考虑到位

2.2K20

spring缓存(cache)-本地

服务端缓存:某些服务应用,自身缓存,当客户端请求时候直接从缓存中快速获取,而减少直接请求数据库,提升服务端性能和效率。...spring 3.1开始支持声名式缓存到4.0后就全面支持JSR-107。...其实spring cahce本质不是一个具体缓存实现方案,只是作为门面来使用类似于事务注解,具体实现还是其他缓存框架比如:ehcache、guava、redis等。...该功能十分强大,并且非常方便支持缓存使用。相关功能可以参照上图。...,会导致脏读; 不针对多进程应用环境进行管理; 无法支持多级缓存; 若没有开启 mode="aspectj" 同一类下方法互调是没有缓存效果,因为aop管理不到。

2.7K20

Spring boot缓存使用

Spring框架为不同缓存产品提供缓存抽象api,API使用非常简单,但功能非常强大。今天我们将在缓存上看到基于注释Java配置,请注意,我们也可以通过XML配置实现类似的功能。...@EnableCaching 它支持Spring注释驱动缓存管理功能,在spring boot项目中,我们需要将它添加到带注释引导应用程序类中@SpringBootApplication。...@Cacheable 它在方法级别上使用,让spring知道该方法响应是可缓存Spring将此方法请求/响应管理到注释属性中指定缓存。...它与@Cacheable支持相同选项,应该用于缓存填充,而不是方法流优化。 请注意,通常不鼓励对同一方法使用@CachePut和@Cacheable注释,因为它们具有不同行为。...Spring启动提供与以下缓存提供程序集成。

91310

Spring对事务支持

上几篇中我们主要介绍了有关数据库事务相关知识,在这一篇中,我们将重点了解一下,在spring中是怎么对事务进行支持。...在其它文章中我们知道spring DAO为了支持不同持久化技术,于是提供了模板类方式使之支持不同持久化技术,那么spring事务管理也是一样,它也是采用了这种方式,于是就提供了 TransactionTemplate...这是因为该接口继承了SavepointManager,而SavepointManager接口又支持JDBC3.0中新增保存点分段事务控制能力。...上面我们介绍了spring中有关事务主要接口,下面我们继续了解一下,在spring中这些接口具体实现,实际上spring为不同持久化技术都提供了不同实现,相关实现类如下: spring就是通过这此实现类进而实现...这样我们数据源就支持事务管理了。

51310

什么是Spring缓存抽象?

有时候我会想spring是怎么做spring如何做到适配不同数据库连接池,不同缓存组件呢? 带着疑问,我翻阅了下Spring源码,关于缓存抽象这部分。...如果只是使用ConcurrentHashMap这种类型缓存的话,我们甚至都不需要依赖spring-boot-starter-cahce(spring-context-support)这个依赖就可以使用...里面有个方法,往spring容器注册bean定义 于是跟着找到了如下配置 CacheAutoConfiguration导入了这么多缓存配置,有EnCache,有Redis,有CAFFEINE...为什么只加入了caffeine实现,spring就能操作caffeine,就好像你操作其他缓存实现一样呢?...在spring-context-support依赖内 Spring对caffeine进行了一层包装,使得spring缓存抽象能够完成像其他缓存一样操作。 似乎这可以说是 策略模式?

38730

基于SpringWeb缓存

缓存分类 数据库数据缓存 一般来说,web应用业务逻辑业务逻辑比较复杂,数据库繁多,要获取某个完整数据,往往要多次读取数据库,或者使用极其复杂效率较低SQL查询语句。...为了提高查询性能,将查询后数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提高响应效率。...应用层缓存 应用层缓存主要针对某个业务方法进行缓存,有些业务对象逻辑比较复杂,可能涉及到多次数据库读写或者其他消耗较高操作,应用层缓存可以将复杂业务逻辑解放出来,降低服务器压力。...一般来说,web应用读取数据需求比更新数据需求大很多,大多数情况下,某个请求返回HTML是一样,因此直接将HTML缓存起来也是缓存一个主流做法。...代理服务器缓存运作原理跟浏览器运作原理差不多,只是规模更大。

39320

Spring JDBC-Spring对DAO支持

总结 概述 Spring对多个持久化技术提供了集成支持,包括Hibernate、MyBatis、JPA、JDO。...---- 统一数据访问模板 Spring支持持久化技术分别提供了模板访问方式,降低了使用各种持久化技术难度,因此可以大幅度提供开发效率。...---- 模板类 Spring为各种支持持久化技术都提供了简化操作模板和回调,在回调中编写具体数据操作逻辑,使用模板执行数据操作,在Spring中这是典型数据操作模式。...Spring为每种持久化技术都提供了支持列,支持类中已完成了这样功能。 这样我们只需要扩展这些支持类,就可以直接编写实际数据访问逻辑,因此更加方便。...所有的支持类都是abstract,其目的是希望被继承使用,而非直接使用 ---- 数据源 在Spring中,不但可以通过JNDI获取应用服务器数据源,也可以在Spring容器中配置数据源。

44840

Spring 支持事务隔离级别

并发事务所导致问题:     当同一个应用程序或者不同应用程序中多个事务在同一个数据集上并发执行时, 可能会出现许多意外问题 并发事务所导致问题可以分为下面三种类型: 脏读: 对于两个事物 T1...之后, 若 T2 回滚, T1读取内容就是临时且无效. 不可重复读:对于两个事物 T1, T2, T1  读取了一个字段, 然后 T2 更新了该字段....事务隔离级别:     从理论上来说, 事务应该彼此完全隔离, 以避免并发事务所导致问题. 然而, 那样会对性能产生极大影响, 因为事务必须按顺序运行.  ...在实际开发中, 为了提升性能, 事务会以较低隔离级别运行.     事务隔离级别可以通过隔离事务属性指定 ? 事务隔离级别要得到底层数据库引擎支持, 而不是应用程序或者框架支持.     ...Oracle 支持 2 种事务隔离级别:READ_COMMITED , SERIALIZABLE     Mysql 支持 4 中事务隔离级别 用 @Transactional 注解声明式地管理事务时可以在

59490

支持注解Spring调度器

概述 如果想在Spring中使用任务调度功能,除了集成调度框架Quartz这种方式,也可以使用Spring自己调度任务框架。...使用Spring调度框架,优点是:支持注解(@Scheduler),可以省去大量配置。...完整范例 实现一个调度任务功能有以下几个关键点: (1) 定义调度器 在spring-bean.xml中进行配置 使用task:scheduler标签定义一个大小为10线程池调度器,spring会实例化一个...@Scheduler使用方法 Spring调度器一个很大亮点在于@Scheduler注解,这可以省去很多繁琐配置。...从而确保方法在下一次调度触发时间点前无法完成执行,来看一看各种方式表现吧。 启动spring项目后,spring会扫描@Component注解,然后初始化ScheduledMgr。

1.1K100

Spring Cloud中Hystrix请求缓存

高并发环境下如果能处理好缓存就可以有效减小服务器压力,Java中有许多非常好用缓存工具,比如Redis、EHCache等,当然在Spring CloudHystrix中也提供了请求缓存功能,我们可以通过一个注解或者一个方法来开启缓存...OK,本文我们就来看看Hystrix中请求缓存使用。...有一种特殊情况:如果我将服务提供者数据修改了,那么缓存数据就应该被清除,否则用户在读取时候就有可能获取到一个错误数据,缓存数据清除也很容易,也是根据id来清除,方式如下: @RequestMapping...,默认所有的参数都将作为缓存key,如果在某次调用中传入两个参数和之前传入两个参数都一致的话,则直接使用缓存,否则就发起请求,如下: @RequestMapping("/test6") public...属性值,Hystrix才能找到请求命令缓存位置。

99880
领券