登陆

章鱼网彩票推荐-Java大牛分享关于 Redis 缓存的几道典型面试题

admin 2019-10-27 308人围观 ,发现0个评论

跟着体系访问量的进步,复杂度的提高,呼应功能成为一个要点的重视点。而缓存的运用成为一个要点。

redis 作为缓存中间件的一个佼佼者,成为了面试必问项目。

本文共享一下Redis几道常见的面试题:

缓存雪崩

1.1 什么是缓存雪崩?

假如咱们的缓存挂掉了,这意味着咱们的悉数恳求都跑去数据库了。

咱们都知道Redis不行能把一切的数据都缓存起来(内存贵重且有限),所以Redis需求对数据设置过期时刻,并选用的是慵懒删去 + 定时删去两种战略对过期键删去。

假如缓存数据设置的过期时刻是相同的,而且Redis恰好将这部分数据悉数删光了。这就会导致在这段时刻内,这些缓存一起失效,悉数恳求到数据库中。

这便是缓存雪崩:Redis挂掉了,恳求悉数走数据库。

缓存雪崩假如发作了,很可能就把咱们的数据库搞垮,导致整个服务瘫痪!

1.2 怎么章鱼网彩票推荐-Java大牛分享关于 Redis 缓存的几道典型面试题处理缓存雪崩?

在缓存的时分给过期时刻加上一个随机值,这样就会大幅度的削减缓存在同一时刻过期。

关于“Redis挂掉了,恳求悉数走数据库”这种状况,咱们能够有以下的思路:

事发前:完成Redis的高可用(主从架构+Sentinel 或许Redis Cluster),尽量防止Redis挂掉这种状况发作。

事发中:假如Redis真的挂了,咱们能够设置本地缓存(ehcache)+限流(hystrix),尽量防止咱们的数据库被干掉(最少能确保咱们的服务仍是能正常作业的)

事发后:redis耐久化,重启后主动从磁盘上加载数据,快速康复缓存数据。

缓存穿透

2.1 什么是缓存穿透

缓存穿透是指查询一个必定不存在的数据。由于缓存不射中,而且出于容错考虑,假如从数据库查不到数据则不写入缓存

这章鱼网彩票推荐-Java大牛分享关于 Redis 缓存的几道典型面试题将导致这个不存在的数据每次恳求都要到数据库去查询,失去了缓存的含义。

这便是缓存穿透:恳求的数据在缓存很多不射中,导致恳求走数据库。

缓存穿透假如发作了,也可能把咱们的数据库搞垮,导致整个服务瘫痪!

2.2 怎么处理缓存穿透?

处理缓存穿透也有两种计划:

由于恳求的参数是不合法的(每次都恳求不存在的参数),所以咱们能够运用布隆过滤器(BloomFilter)或许紧缩filter提早阻拦,不合法就不让这个恳求到数据库层!

当咱们从数据库找不到的时分,咱们也将这个空目标设置到缓存里面去。下次再恳求的时分,就能够从缓存里面获取了。

这种状况咱们一般会将空目标设置一个较短的过期时刻。

缓存与数据库双写共同

3.1 关于读操作,流程是这样的

假如咱们的数据在缓存里面有,那么就直接取缓存的。

假如缓存里没有咱们想要的数据,咱们会先去查询数据库三栖概念车,然后将数据库查出来的数据写到缓存中。最终将数据回来给恳求。

3.2 什么是缓存与数据库双写共同问题?

假如只是查询的话,缓存的数据和数据库的数据是没问题的。可是,当咱们要更新时分呢?各种状章鱼网彩票推荐-Java大牛分享关于 Redis 缓存的几道典型面试题况很可能就形成数据库和缓存的数据不共同了。

这儿不共同指的是:数据库的数据跟缓存的数据不共同

从理论上说,只需咱们设置了键的过期时刻,咱们就能确保缓存和数据库的数据最终是共同的。

由于只需缓存数据过期了,就会被删去。随后读的时分,由于缓存里没有,就能够查数据库的数据,然后将数据库查出来的数据写入到缓存中。

除了设置过期时刻,咱们还需求做更多的办法来尽量防止数据章鱼网彩票推荐-Java大牛分享关于 Redis 缓存的几道典型面试题库与缓存处于不共同的状况发作。

最终

本文带领我们了解了怎么处理缓存雪崩、缓存穿透、确保缓存与数据库双写时共同 等问题,期望我们看完有所协助。

重视我,私信回复“材料”获取面试宝典《Java中心知识点收拾.pdf》“,覆盖了JVM、锁、高并发、反射、Spring原理、微服务、Zookeeper、数据库、数据结构等等”,还有Java208道面试题(含答案)的免费收取方法!

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP