每场后端面试,似乎都少不了关于 redis 的话题,比如项目使用过哪些分布式缓存服务,为什么要使用 redis,有没有碰到过缓存失效、缓存穿透、缓存雪崩等问题。
官渡ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
在前几篇关于 redis 的介绍文章中,我们说到项目中之所以会引入分布式缓存服务,主要是为了解决集群环境下,内存数据不共享的问题,比如 session 会话,以及一些字典缓存等等,在当前服务器的内存中存储,在另一台服务器中难以获取查询的问题,通过引入缓存服务,将缓存数据统一归一到一个服务器里面,以解决系统中内存数据不共享的问题,同时缓存性能也不会受到很大影响。
当然软件开源市场上,也有很多的分布式缓存服务,比如比较有名的有 redis、memcached 等,相对比 memcached,redis 各项指标都要比 memcached 强很多,Redis 号称能读的速度是 110000 次/s,写的速度是 81000次/s,无数的实践证明 redis 确实是当前一款非常高性能的内存数据库。
站在面试官的角度,软件系统的技术选型以及以上的相关技术问题,在实际的生产环境中确实也会发生,通过以此话题为切入点,可以更加清晰的了解面试者是否也碰到过类似的问题,以及对应处理的办法。
那么站在面试者的角度,除了熟练的掌握 redis 的使用方法以外,我们可能还需要更加深入的了解如果引入 redis 之后,系统中可能会发生的一些问题以及应对办法。
今天我们一起聊聊吧。
Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上;也可以把每一次数据变化都写入到一个aof日志文件里面,当 redis 的服务器重启的时候,自动从日志文件里面恢复数据到内存中。
有哪些场景会发生缓存失效呢?总结起来有以下两种场景:
通常情况下我们使用缓存,其中有一个很重要的目的就是降低数据库的访问压力,比如商品的信息查询,优先是从缓存中查询,如果没有,再从数据库里面查询。
对于既有数据库写入又有缓存操作的接口,一般分为两种情况执行。
大部分情况下,缓存理论上都是需要可以从数据库恢复出来的,所以基本上采取第一种顺序都是不会有问题的,但是无法保证数据库和缓存完全一致。
也就是说,使用缓存,就可能会出现缓存与数据库不一致的情况,只是说这种几几率的情况有多大。
针对那些必须保证数据库和缓存一致的情况,通常是不建议使用缓存的,直接从数据库查询。
缓存穿透,表示恶意用户频繁的模拟请求缓存中不存在的数据,此时如果有大量的接口请求,短时间内会直接落在了数据库上,缓存被击穿,导致数据库性能急剧下降,最终影响服务整体的性能。
这个在实际项目中很容易遇到,如抢购活动、秒杀活动、抢优惠券等接口 API 被大量的恶意用户刷,导致短时间内数据库宕机。对于缓存击穿的问题,有以下几种解决方案。
缓存雪崩,简单的说就是在短时间内有大量缓存失效,如果这期间有大量的请求发生,同样也有可能会导致数据库发生宕机。在 Redis 机群的数据分布算法上如果使用的是传统的 hash 取模算法,在增加或者移除 Redis 节点的时候就会出现大量的缓存临时失效的情形。
对于缓存雪崩的问题,有以下几种解决方案。
首先 Redis 是单线程执行命令的,在出现多个 Redis Client 并发操作数据时,秉承先发起先执行的原则,其它的处于阻塞状态。
redis 缓存并发问题,其实主要指的还是读取数据库数据的并发操作问题。
当缓存过期后会从数据库查询数据然后再存入Redis缓存,但是在高并发情况下,可能还没来得及将数据库中查出来的数据存入Redis时,其它Client又从数据库里查询数据再存入Redis了。
这样一来会造成多个请求并发的从数据库获取数据,然后存入Redis,可能在读取的时候,出现脏数据。
针对这种场景,有以下几种解决方案。
本文主要围绕 redis 使用中出现的一些场景问题,进行一次简单的总结,如果有疏漏的地方,欢迎网友留言指出!
1、博客园 - 卡斯特梅的雨伞- springboot中RedisTemplate的使用
当前名称:三分钟带你掌握缓存穿透、缓存雪崩、缓存击穿,以及应对方案!
当前URL:http://www.gawzjz.com/qtweb2/news16/11166.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联