dede本地搭建好网站后台密码和用户名是什么,崂山网站建设,网站开发一年费用总计,中山平面设计公司目录 一、面试官心理分析
二、面试题剖析
1. 缓存雪崩
2. 缓存穿透
3. 缓存击穿 一、面试官心理分析 其实这是问到缓存必问的#xff0c;因为缓存雪崩和穿透#xff0c;是缓存最大的两个问题#xff0c;要么不出现#xff0c;一旦出现就是致命性的问题#x…目录 一、面试官心理分析
二、面试题剖析
1. 缓存雪崩
2. 缓存穿透
3. 缓存击穿 一、面试官心理分析 其实这是问到缓存必问的因为缓存雪崩和穿透是缓存最大的两个问题要么不出现一旦出现就是致命性的问题所以面试官一定会问你。
二、面试题剖析
1. 缓存雪崩 对于系统 A假设每天高峰期每秒 5000个请求本来缓存在高峰期可以扛住每秒 4000 个请求但是缓存机器意外发生了全盘宕机。缓存挂了此时1秒5000 个请求全部落数据库数据库必然扛不住它会报一下警然后就挂了。此时如果没有采用什么特别的方案来处理这个故障DBA 很着急重启数据库但是数据库立马又被新的流量给打死了。 这就是缓存雪崩。 大约在3年前国内比较知名的一个互联网公司曾因为缓存事故导致雪崩后台系统全部崩溃事故从当天下午持续到晚上凌晨 3~4 点公司损失了几千万。 缓存雪崩的事前事中事后的解决方案如下: · 事前: Redis 高可用主从哨兵Redis cluster避免全盘崩溃。 · 事中: 本地 ehcache 缓存 hystrix 限流降级避免 MySQL 被打死。 · 事后: Redis持久化一旦重启自动从磁盘上加载数据快速恢复缓存数据。 用户发送一个请求系统A收到请求后先査本地 ehcache 缓存如果没査到再査 Redis。如果 ehcache 和 Redis 都没有再査数据库将数据库中的结果写入 ehcache 和 Redis 中。 限流组件可以设置每秒的请求有多少能通过组件剩余的未通过的请求怎么办?走降级!可以返回一些默认的值或者友情提示或者空值。好处: 数据库绝对不会死限流组件确保了每秒只有多少个请求能通过。 只要数据库不死就是说对用户来说2/5的请求都是可以被处理的。 只要有 2/5 的请求可以被处理就意味着你的系统没死对用户来说可能就是点击几次刷不出来页面但是多点几次就可以刷出来了。
2. 缓存穿透 对于系统A假设一秒 5000 个请求结果其中 4000 个请求是黑客发出的恶意攻击。黑客发出的那 4000 个攻击缓存中查不到每次你去数据库里查也查不到。 举个栗子。数据库id 是从1开始的结果黑客发过来的请求id 全部都是负数。这样的话缓存中不会有请求每次都“ 视缓存于无物 ”直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。 解决方式很简单每次系统A从数据库中只要没查到就写一个空值到缓存里去比如set-999 UNKNOWN 。然后设置一个过期时间这样的话下次有相同的key来访问的时候在缓 存失效之前都可以直接从缓存中取数据。
3. 缓存击穿 缓存击穿就是说某个 key 非常热点访问非常频繁处于集中式高并发访问的情况当这个key 在失效的瞬间大量的请求就击穿了缓存直接请求数据库就像是在一道屏障上凿开了一个洞。不同场景下的解决方式可如下: 若缓存的数据是基本不会发生更新的则可尝试将该热点数据设置为永不过期。 若缓存的数据更新不频繁且缓存刷新的整个流程耗时较少的情况下则可以采用基于Redis、zookeeper 等分布式中间件的分布式互斥锁或者本地互斥锁以保证仅少量的请求能请求数据库并重新构建缓存其余线程则在锁释放后能访问到新缓存。 若缓存的数据更新频繁或者在缓存刷新的流程耗时较长的情况下可以利用定时线程在缓存过期前主动地重新构建缓存或者延后缓存的过期时间以保证所有的请求能一直访问到对应的缓存。
ps一个点赞一份爱点个关注不迷路