Ehcache

这5个常问的Redis面试题你答得出来吗?(详细剖析)

牧云@^-^@ 提交于 2020-04-28 15:29:54
redis 集群模式的工作原理能说一下么?在集群模式下, redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 1、面试官心理分析 在前几年,redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有codis,或者 twemproxy,都有。有一些 redis 中间件,你读写 redis 中间件,redis 中间件负责将你的数据分布式存储在多台机器上的 redis 实例中。 这两年,redis 不断在发展,redis 也不断有新的版本,现在的 redis 集群模式,可以做到在多台机器上,部署多个 redis 实例,每个实例存储一部分的数据,同时每个 redis 主实例可以挂 redis 从实例,自动确保说,如果 redis 主实例挂了,会自动切换到 redis 从实例上来。 现在 redis 的新版本,大家都是用 redis cluster 的,也就是 redis 原生支持的 redis 集群模式,那么面试官肯定会就 redis cluster 对你来个几连炮。要是你没用过 redis cluster,正常,以前很多人用 codis 之类的客户端来支持集群,但是起码你得研究一下 redis cluster 吧。 如果你的数据量很少,主要是承载高并发高性能的场景,比如你的缓存一般就几个 G,单机就足够了,可以使用

2020年3月2日的面试:什么是 redis 的雪崩、穿透和击穿?

↘锁芯ラ 提交于 2020-04-28 07:33:45
面试题 了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓存雪崩和穿透,是缓存最大的两个问题,要么不出现,一旦出现就是致命性的问题,所以面试官一定会问你。 面试题剖析 缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。 这就是缓存雪崩。 redis-caching-avalanche 大约在 3 年前,国内比较知名的一个互联网公司,曾因为缓存事故,导致雪崩,后台系统全部崩溃,事故从当天下午持续到晚上凌晨 3~4 点,公司损失了几千万。 缓存雪崩的事前事中事后的解决方案如下: 事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。 事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。 redis-caching

springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离

℡╲_俬逩灬. 提交于 2020-04-26 14:01:33
1.代码生成器: [正反双向](单表、主表、明细表、树形表,快速开发利器) freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面、建表sql脚本、处理类、service等完整模块 2.多数据源: (支持同时连接无数个数据库,可以不同的模块连接不同数的据库)支持N个数据源 3. 阿里数据库连接池 druid ,安全权限框架 shiro( 菜单权限和按钮权限 ) , 缓存框架 ehcache 4. 代码编辑器, 在线模版编辑,仿开发工具编辑器 5.调用摄像头拍照 自定义裁剪编辑头像,头像图片色度调节 6.websocket 及时站内信并声音提醒、实时在线管理、websocket及时刷新页面(完胜ajax技术) 7.redis存储分布式缓存 自windows redis 绿色版,方便开发者本地开发测试 ----------------------------------------------------------------------------------------------------------------- 服务介绍 ( 各个服务单独运行,高可用、低耦合 ) 一:springcloud服务 ---------------------------------------------------------------------------------

业余草分享Java高级工程师,面试总结

*爱你&永不变心* 提交于 2020-04-26 06:53:46
面试之前觉得自己在原来公司相同工作经验的同事当中,无论是业务能力还是技术能力都还可以,也对自己解决问题的能力有一定的自信,刚开始面试的时候,一度出现了尴尬,明明知道的东西,就是说不出来,也不知道从哪里说,自己觉得就应该是那样啊,怎么说,而且一度对自己的能力产生了怀疑; 最后发现是不经常总结,不善于总结,虽然也记笔记,但比较散乱,不系统,甚至丢失;所以开始写博客,觉得这应该是一个好的开端吧; 1、 JVM结构原理、GC工作机制详解 答:具体参照: JVM结构、GC工作机制详解 ,说到GC,记住两点:1、GC是负责回收所有无任何引用对象的内存空间。 注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,2、GC回收机制的两种算法,a、引用计数法 b、可达性分析算法( 这里的可达性,大家可以看基础2 Java对象的什么周期),至于更详细的GC算法介绍,大家可以参考: Java GC机制算法 2、Java对象的生命周期 答:创建阶段 、 应用阶段 、不可见阶段 、不可达阶段 、收集阶段 、终结阶段、 对象空间重新分配阶段等等,具体参照: Java 对象的生命周期 3、Map或者HashMap的存储原理 答:HashMap是由数组+链表的一个结构组成,具体参照: HashMap的实现原理 4、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗?

ff4j 一些高级概念

杀马特。学长 韩版系。学妹 提交于 2020-04-21 16:13:08
feature groups 通过feature groups 我们可以将同一个release 实例的feature 聚合起来,灵活管理 参考配置 <? xml version = "1.0" encoding = "UTF-8" ?> < features > <!-- Sample Feature Group --> < feature - group name = "release-2.3" > < feature uid = "users-story1" enable = "false" /> < feature uid = "users-story2" enable = "false" /> < /feature-group> ​ < feature uid = "featA" enable = "true" /> < feature uid = "featB" enable = "false" /> < /features> 代码访问 @ Test public void myGroupTest() { FF4j ff4j = new FF4j( "ff4j-groups.xml"); ​ // Check features loaded assertEquals( 4, ff4j. getFeatures(). size()); assertTrue( ff4j.

趣说Redis面试时必问的缓存雪崩+击穿+穿透

荒凉一梦 提交于 2020-04-21 00:25:05
提到Redis我相信各位在面试,或者实际开发过程中对缓存雪崩,穿透,击穿也不陌生吧,就算没遇到过但是你肯定听过,那三者到底有什么区别,我们又应该怎么去防止这样的情况发生呢,我们有请下一位受害者。 一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 小伙子我看你的简历上写到了Redis,那么我们直接开门见山,直接怼常见的几个大问题,Redis雪崩了解么? 帅气迷人的面试官您好,我了解的,目前电商首页以及热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题。 举个简单的例子: 如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是我理解的缓存雪崩。 我刻意看了下我做过的项目,感觉再吊的都不允许这么大的QPS直接打DB去,不过没慢SQL加上分库

Redis项目实战(一)--redis基础

♀尐吖头ヾ 提交于 2020-04-18 08:34:13
redis(Remote Dictionary Server) 一、原理及特性层面: 1、优势: 1)数据加载在内存中,执行速度快, 数据结构类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。 2)单线程多路复用,I/O多路复用(防止 I/O 阻塞)-- 一种效率更高的 I/O 模型, 在单个线程中通过记录跟踪每一个sock(I/O流) 的状态来管理多个I/O流。(相比多线程效率更高, .跟多线程相比较,线程切换需要切换到内核进行线程切换,需要消耗时间和资源, I/O多路复用不需要切换线/进程) 3)协议简单,客户端和服务端使用 RESP协议(容易实现、快速解析), RESP是二进制安全的而且从一个进程发块数据给另一个进程的时候不需要做转换,因为他会在块数据之前加上长度。 *2 $3 GET $4 name 2、特点及应用: 0)支持lua脚本, 在Redis中,执行Lua语言是原子性,也就是说Redis执行Lua的时候是不会被中断的,具备原子性,这个特性有助于Redis对并发数据一致性的支持。 1)支持事务、 watch,操作命令都是原子的。 Redis 事务: Redis中的事务(transaction)是一组命令的集合。 Redis保证一个事务中的所有命令要么都执行,要么都不执行。如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列

缓存之EHCache(第三个记录)

我只是一个虾纸丫 提交于 2020-04-11 20:48:11
六、在页面中使用EHCache缓存 简单的来说,如果一个应用中80% 的时间内都在访问20% 的数据,那么,这时候就应该使用缓存了。 在80/20 原则生效的地方,我们都应该考虑是否可以使用缓存。但即使是这样,缓存也有不同的用法,举个例子,一个网站的首页估计是被访问的次数最多的,我们可以考虑给首页做一个页面缓存。页面访问最频繁的,做缓存。不同的页面的缓存策略有可能有天壤之别。 毫无疑问,几乎所有的网站的首页都是访问率最高的,而首页上的数据来源又是非常广泛的,大多数来自不同的对象,而且有可能来自不同的db ,所以给首页做缓存是一个不错的主意,那么主页的缓存策略是什么样子的呢,我认为应该是某个固定时间之内不变的,比如说2 分钟更新一次。或者根据不同的网页功能采取合理的策略。 在使用ehcache 的页面缓存之前,我们必须要了解ehcache 的2个概念: (1) timeToIdleSeconds ,多长时间不访问该缓存,那么ehcache 就会清除该缓存。 (2) timeToLiveSeconds ,缓存的存活时间,从开始创建的时间算起。 1、配置ehcache.xml文件 2、在web.xml配置文件中配置过滤器信息 好了,缓存整个页面看上去是非常的简单,甚至都不需要写一行代码,只需要几行配置就行了,够简单吧,虽然看上去简单,但是事实上内部实现却不简单哦,有兴趣的话

b2b2c系统jwt权限源码分享part2

女生的网名这么多〃 提交于 2020-04-09 18:17:02
  在上一篇《 b2b2c系统jwt权限源码分享part1 》中和大家分享了b2b2c系统中jwt权限的基础设计及源码,本文继续和大家分享jwt和spring security整合部分的思路和源码。 在上一篇文章中已经分享了关键的类图: 如上图所示,权限的校验主要涉及到四个类: AbstractAuthenticationService BuyerAuthenticationService SellerAuthenticationService AdminAuthenticationService AbstractAuthenticationService 对于三端(买家买家管理端)验权的公用部分我们抽象在AbstractAuthenticationService中: public abstract class AbstractAuthenticationService implements AuthenticationService { @Autowired protected TokenManager tokenManager; private final Logger logger = LoggerFactory.getLogger(getClass()); /** * 单例模式的cache */ private static Cache<String, Integer>

【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)

二次信任 提交于 2020-04-07 10:48:46
一、缓存 当系统的并发量上来了,如果我们频繁地去访问数据库,那么会使数据库的压力不断增大,在高峰时甚至可以出现数据库崩溃的现象。所以一般我们会使用缓存来解决这个数据库并发访问问题,用户访问进来,会先从缓存里查询,如果存在则返回,如果不存在再从数据库里查询,最后添加到缓存里,然后返回给用户,当然了,接下来又能使用缓存来提供查询功能。 而缓存,一般我们可以分为本地缓存和分布式缓存。 常用的本地缓存有 ehcache、guava cache,而我们一般都是使用 ehcache,毕竟他是纯 Java 的,出现问题我们还可以根据源码解决,并且还能自己进行二次开发来扩展功能。 常用的分布式缓存当然就是 Redis 了,Redis 是基于内存和单线程的,执行效率非常的高。 二、Spring Cache 相信如果要整合缓存到项目中,大家都会使用到 Spring Cache,它不但整合了多种缓存框架(ehcache、jcache等等),还可以基于注解来使用,是相当的方便。 缓存框架的整合在 spring-context-support 中: 缓存注解在 spring-context 中: 当然了,在 Spring 的 context 中没有整合 Redis,但是我们可以在 spring-data-redis 中找到。 但是我们都知道,不管是在 Spring 项目 还是 Spring Boot 中