Ehcache

How to use spring boot 2 and ehcache 3 without xml?

徘徊边缘 提交于 2020-06-12 07:50:42
问题 For now I have following config: @Configuration @EnableCaching public class EhcacheConfig { @Bean public CacheManager cacheManager() throws URISyntaxException { return new JCacheCacheManager(Caching.getCachingProvider().getCacheManager( getClass().getResource("/ehcache.xml").toURI(), getClass().getClassLoader() )); } } It refers to the following XML: <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.ehcache.org/v3" xmlns:jsr107="http://www.ehcache.org/v3/jsr107"

什么是 redis 的雪崩、穿透和击穿?

二次信任 提交于 2020-05-09 10:29:38
出处: 什么是 redis 的雪崩、穿透和击穿?   关于Redis雪崩,穿透,击穿的问题,第一次接触名字有点陌生,听上去还比较相似,难以理解,过去做的很多项目中也都是用过Redis,但是第一次听到这几个关于Redis的坑还是一脸懵逼,直到这些坑真正显灵的时候才彻底意识到搞明白。   第一次线上遇到 Redis 雪崩的时候我是维护某电影线上平台(某首富家的)国内某电影平台,因为系统架构老旧,每年大年初一贺岁档电影上映,购票人达到高峰,系统就会发生因缓存失效问题导致的出票故障,当时底层是用的oracle小型机,依旧扛不住。大年初一,所有同事打开电脑被迫营业,关于缓存失效引起的类似问题,坚决要扼杀,对用户友好,对程序员友好,对老板也友好。 1.面试官:关于Redis雪崩,穿透,击穿你是怎么理解的? Redis 雪崩:   雪崩就是指缓存中 大批量热点数据过期 后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。 解决办法: 将缓存失效时间分散开,比如每个key的过期时间是随机,防止同一时间大量数据过期现象发生,这样不会出现同一时间全部请求都落在数据库层,如果缓存数据库是分布式部署,将热点数据均匀分布在不同Redis和数据库中,有效分担压力,别一个人扛。 简单粗暴,让Redis数据永不过期

Spring+ehcache+redis两级缓存

感情迁移 提交于 2020-05-08 23:49:19
问题描述 场景:我们的应用系统是分布式集群的,可横向扩展的。应用中某个接口操作满足以下一个或多个条件: 1. 接口运行复杂代价大, 2. 接口返回数据量大, 3. 接口的数据基本不会更改, 4. 接口数据一致性要求不高(只需满足最终一致)。 此时,我们会考虑将这个接口的返回值做缓存。考虑到上述条件,我们需要一套高可用分布式的缓存集群,并具备持久化功能,备选的有 ehcache集群 或 redis主备(sentinel) 。 ehcache集群因为节点之间数据同步通过组播的方式,可能带来的问题:节点间大量的数据复制带来额外的开销,在节点多的情况下此问题越发严重,N个节点会出现N-1次网络传输数据进行同步。(见下图,缓存集群中有三台机器,其中一台机器接收到数据,需要拷贝到其他机器,一次input后需要copy两次,两次copy是需要网络传输消耗的) redis主备由于作为中心节点提供缓存,其他节点都向redis中心节点取数据,所以,一次网络传输即可。(当然此处的一次网络代价跟组播的代价是不一样的)但是,随着访问量增大,大量的缓存数据访问使得应用服务器和缓存服务器之间的网络I/O消耗越大。(见下图,同样三台应用服务器,redis sentinel作为中心节点缓存。所谓中心,即所有应用服务器以redis为缓存中心,不再像ehcache集群,缓存是分散存放在应用服务器中,需要互相同步的

spring(三、spring中的eheche缓存、redis使用)

纵然是瞬间 提交于 2020-05-08 23:48:58
spring(三、spring中的eheche缓存、redis使用) 本文主要介绍为什么要构建ehcache+redis两级缓存?以及在实战中如何实现?思考如何配置缓存策略更合适?这样的方案可能遗留什么问题?JUST DO IT! GO! 问题描述 场景:我们的应用系统是分布式集群的,可横向扩展的。应用中某个接口操作满足以下一个或多个条件: 1. 接口运行复杂代价大, 2. 接口返回数据量大, 3. 接口的数据基本不会更改, 4. 接口数据一致性要求不高(只需满足最终一致)。 此时,我们会考虑将这个接口的返回值做缓存。考虑到上述条件,我们需要一套高可用分布式的缓存集群,并具备持久化功能,备选的有ehcache集群或redis主备(sentinel)。 ehcache集群因为节点之间数据同步通过组播的方式,可能带来的问题:节点间大量的数据复制带来额外的开销,在节点多的情况下此问题越发严重,N个节点会出现N-1次网络传输数据进行同步。(见下图,缓存集群中有三台机器,其中一台机器接收到数据,需要拷贝到其他机器,一次input后需要copy两次,两次copy是需要网络传输消耗的) redis主备由于作为中心节点提供缓存,其他节点都向redis中心节点取数据,所以,一次网络传输即可。(当然此处的一次网络代价跟组播的代价是不一样的)但是,随着访问量增大

Spring+SpringMvc+Mybatis+ehcache ssm简单整合ehcache缓存

99封情书 提交于 2020-05-02 18:35:36
z这里只讲ssm整合ehcache缓存,对于还不了解ssm的童鞋,请先浏览ssm整合那篇 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。 首先配置EhCache jar包 <!-- ehcache 相关依赖 --> <!-- https: // mvnrepository.com/artifact/net.sf.ehcache/ehcache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.10.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> </dependencies> 目录结构

【Redis】基础学习概览【汇总】

不羁的心 提交于 2020-05-01 06:13:46
一、概述 1.1 简介 1.2 Redis单线程好处 1.3 单线程弊端 1.4 Redis应用场景 1.5 Redis 和 Memecached 的区别 二、安装、开启以及关闭 三、Redis基本数据类型 四、SpringBoot整合Redis 五、Redis发布订阅 六、Redis主从复制 七、Redis哨兵机制 八、Redis事务 九、SpringBoot+Redis+Ehcache实现二级缓存 十、Redis持久化方式 十一、Redis集群方式 十二、Redis 缓存雪崩和缓存穿透 十三、用Redis解决分布式Session 一、概述 1.1 简介 Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。 Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由 C语言 编写。官方提供的数据是可以达到100000+的qps, Redis是一个非关系型数据库(NoSQL) 内存数据库,以key value方式进行存储 Redis以单线方式存储,既然是单线程

缓存如果使用不当会造成什么后果?

本秂侑毒 提交于 2020-04-29 14:00:34
了解什么是 redis 的雪崩和穿透?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。 这就是缓存雪崩。 大约在 3 年前,国内比较知名的一个互联网公司,曾因为缓存事故,导致雪崩,后台系统全部崩溃,事故从当天下午持续到晚上凌晨 3~4 点,公司损失了几千万。 缓存雪崩的事前事中事后的解决方案如下。 事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。 事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。 用户发送一个请求,系统 A 收到请求后,先查本地 ehcache 缓存,如果没查到再查 redis。如果 ehcache 和 redis 都没有,再查数据库,将数据库中的结果,写入 ehcache 和 redis 中。 限流组件,可以设置每秒的请求

【Redis】缓存穿透与缓存雪崩

丶灬走出姿态 提交于 2020-04-29 13:17:21
一、缓存雪崩 1.1 缓存雪崩产生的原因 1.2 解决方案 1.3 锁的方式 1.4 消息中间件 1.5 一级和二级缓存 1.6 均摊分配redis key 失效时间 二、缓存穿透 一、缓存雪崩 1.1 缓存雪崩产生的原因   缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取,如下图)所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,造成系统的崩溃。 155609 缓存失效的时候 155609 1.2 解决方案   缓存失效时的雪崩效应对底层系统的冲击非常可怕!那有什么办法来解决这个问题呢?基本解决思路如下: 分布式锁:大多数系统设计者考虑用加锁或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,避免缓存失效时对数据库造成太大的压力,虽然能够在一定的程度上缓解了数据库的压力但是与此同时又降低了系统的吞吐量。 使用消息中间件 一级和二级缓存(Redis+Ehcache) 均摊分配redis key的失效时间,分析用户的行为,尽量让缓存失效的时间均匀分布。 如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。 1.3 锁的方式 使用分布式锁(本地锁

缓存雪崩和缓存穿透问题解决方案

こ雲淡風輕ζ 提交于 2020-04-29 12:09:28
缓存雪崩 简介: 缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。 解决办法: 事前: 尽量保证整个 Redis 集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。 事中: 本地 Ehcache 缓存 + Hystrix 限流&降级,避免 MySQL 崩掉。 事后: 利用 Redis 持久化机制保存的数据尽快恢复缓存。 缓存穿透 简介: 一般是黑客故意去请求缓存中不存在的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。 解决办法: 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的 bitmap 中。 一个一定不存在的数据会被这个 bitmap 拦截掉,从而避免了对底层存储系统的查询压力。 另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。 文章转载于: https://www.cnblogs.com/andy6/p/9771365.html 来源: oschina 链接: https://my.oschina.net/u/4330791/blog/3376106

《【面试突击】— Redis篇》--Redis Cluster及缓存使用和架构设计的常见问题

别来无恙 提交于 2020-04-29 01:21:47
能坚持别人不能坚持的,才能拥有别人未曾拥有的。 关注 编程大道 公众号,让我们一同坚持心中所想,一起成长!! 《【面试突击】— Redis篇》--Redis Cluster及缓存使用和架构设计的常见问题 在这个系列里,我会整理一些面试题与大家分享,帮助年后和我一样想要在金三银四准备跳槽的同学。 我们一起巩固、突击面试官常问的一些面试题,加油!! 《【面试突击】— Redis篇》--Redis数据类型?适用于哪些场景? 《【面试突击】— Redis篇》--Redis的线程模型了解吗?为啥单线程效率还这么高? 《【面试突击】— Redis篇》-- Redis的主从复制?哨兵机制? 《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制 说说Redis cluster 在redis cluster集群架构中,可以由N个redis master node组成,每个master node都可以挂载多个slave node。 可以自动将数据进行分片,每个master上放一部分数据; 还提供内置的高可用支持,部分master不可用时,还是可以继续工作的,因为每个master都有salve节点,那么如果mater挂掉,redis cluster这套机制,就会自动将某个slave切换成master; 支持读写分离:对于每个master来说,都负责写请求,写就写到master