加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

面试前必须要知道的Redis面试

发布时间:2019-02-20 13:46:34 所属栏目:编程 来源:Java3y
导读:本日来分享一下Redis几道常见的口试题: 怎样办理缓存雪崩? 怎样办理缓存穿透? 怎样担保缓存与数据库双写时同等的题目? 一、缓存雪崩 1.1 什么是缓存雪崩? 回首一下我们为什么要用缓存(Redis): 为什么要缓存 此刻有个题目,假如我们的缓存挂掉了,这意味

一样平常我们都是采纳删除缓存缓存计策的,缘故起因如下:

  1. 高并发情形下,无论是先操纵数据库照旧后操纵数据库而言,假如加上更新缓存,那就越发轻易导致数据库与缓存数据纷歧致题目。(删除缓存直接和简朴许多)
  2. 假如每次更新了数据库,都要更新缓存【这里指的是频仍更新的场景,这会淹灭必然的机能】,倒不如直接删除去。等再次读取时,缓存里没有,那我到数据库找,在数据库找到再写到缓存里边(浮现懒加载)

基于这两点,对付缓存在更新时而言,都是提议执行删除操纵!

3.3.2先更新数据库,再删除缓存正常的环境是这样的:

  • 先操纵数据库,乐成;
  • 再删除缓存,也乐成;

假如原子性被粉碎了:

  • 第一步乐成(操纵数据库),第二步失败(删除缓存),会导致数据库里是新数据,而缓存里是旧数据。
  • 假如第一步(操纵数据库)就失败了,我们可以直接返回错误(Exception),不会呈现数据纷歧致。

假如在高并发的场景下,呈现数据库与缓存数据纷歧致的概率出格低,也不是没有:

  • 缓存恰恰失效
  • 线程A查询数据库,得一个旧值
  • 线程B将新值写入数据库
  • 线程B删除缓存
  • 线程A将查到的旧值写入缓存

要告竣上述环境,照旧说一句概率出格低:

由于这个前提必要产生在读缓存时缓存失效,并且并发着有一个写操纵。而现实上数据库的写操纵会比读操纵慢得多,并且还要锁表,而读操纵必须在写操纵提高入数据库操纵,而又要晚于写操纵更新缓存,全部的这些前提都具备的概率根基并不大。

对付这种计策,着实是一种计划模式:Cache Aside Pattern

先修改数据库,再删除缓存

删除缓存失败的办理思绪:

  • 将必要删除的key发送到动静行列中
  • 本身斲丧动静,得到必要删除的key
  • 不绝重试删除操纵,直到乐成

3.3.3先删除缓存,再更新数据库正常环境是这样的:

  • 先删除缓存,乐成;
  • 再更新数据库,也乐成;

假如原子性被粉碎了:

  • 第一步乐成(删除缓存),第二步失败(更新数据库),数据库缓和存的数据照旧同等的。
  • 假如第一步(删除缓存)就失败了,我们可以直接返回错误(Exception),数据库缓和存的数据照旧同等的。

看起来是很柔美,可是我们在并发场景下说明一下,就知道照旧有题目的了:

  • 线程A删除了缓存
  • 线程B查询,发明缓存已不存在
  • 线程B去数据库查询获得旧值
  • 线程B将旧值写入缓存
  • 线程A将新值写入数据库

以是也会导致数据库缓和存纷歧致的题目。

并发下办理数据库与缓存纷歧致的思绪:

  • 将删除缓存、修改数据库、读取缓存等的操纵积存到行列里边,实现串行化。
口试前必必要知道的Redis口试

将操纵积存到行列中

3.4比拟两种计策

我们可以发明,两种计策各自有优弱点:

  • 先删除缓存,再更新数据库
    • 在高并发下示意不快意,在原子性被粉碎时示意优秀
  • 先更新数据库,再删除缓存(Cache Aside Pattern计划模式)
    • 在高并发下示意优秀,在原子性被粉碎时示意不快意

3.5 其他保障数据同等的方案与资料

可以用databus可能阿里的canal监听binlog举办更新。

参考资料:

  • 缓存更新的套路

https://coolshell.cn/articles/17416.html

  • 怎样担保缓存与数据库双写时的数据同等性?

https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-consistence.md

  • 漫衍式之数据库缓和存双写同等性方案理会

https://zhuanlan.zhihu.com/p/48334686

  • Cache Aside Pattern

https://blog.csdn.net/z50l2o08e2u4aftor9a/article/details/81008933

最后

这是几道Redis常见的口试题,但愿各人看完有所辅佐,顺遂拿到offer!

【编辑保举】

  1. 2月数据库排行榜:MySQL分数增添迅猛,Oracle降落最多
  2. MySQL主从复制虽好,能美满办理数据库单点题目吗?
  3. 开源数据库:PostgreSQL、MariaDB和SQLite的比拟
  4. 聊聊Java数据库开拓的那点事儿
  5. 一文揭秘单线程的Redis为什么这么快?
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读