面试--缓存

Posted xyzshm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试--缓存相关的知识,希望对你有一定的参考价值。

1.项目中缓存是如果使用的?缓存如果不使用会造成什么后果?

最近项目:案件信息,登录后cms信息,人员信息等作缓存处理,

不使用?查询太慢,体验差,;高峰的时候,数据库连接(4-5千的请求?)承载不了造成奔溃

2. 为啥用缓存?、

作高性能,高并发

高性能:比如之前每次查询都要去连接数据库查询个六百毫秒,作了缓存后直接在缓存中返回,3毫秒搞定,性能提升200倍

高并发:数据库能承受的并发请求是有限的,而缓存走的是内存自然就能承受更好的并发请求。

3.使用缓存面临问题?

缓存和数据库双写不一致

缓存雪崩

缓存穿透

缓存并发竞争

 

4. 为什么redis单线程模型,还可以支持高并发?

纯内存操作,核心是基于非阻塞的IO多路复用机制,单线程反而避免了多线程的频繁上下文切换问题;

技术图片

 

技术图片

 

  首先,客户端与redis是通过socket建立通信的,那么在redis中就存在一个server socket,redis的IO多路复用器监听server socket的一个特定事件(AE_READABLE),将它压入到队列中,

然后redis的文件事件分派器,从队列中取出事件分派到相应的处理器(连接应答处理器,命令请求处理器,命令回复处理器)中处理。

有了这么一个通信机制后,客户发送命令请求后。。。。。。

5.redis都有哪些数据类型?分别在那些场景用合适?

string:作简单的set和get

hashmap:缓存结构化数据,比如简单对象

list:文章评论列表,下拉分页

set:无序集合,自动去重的数据

sorted  set:排名

6.redis的过期策略?

定期删除:

 redis每隔100m回随机删除设置过期时间的key,判断是否过期,过期删除

 惰性删除:

在获取数据的时候,检查key是否过期,过期删除

 7.怎么保证redis是高并发以及高可用的?主从复制原理?哨兵原理?

主从架构架构 --> 读写分离架构 --> 可支持水平扩展的读高并发架构

单主用来写数据,单机几万,多从用来读数据,多个实例可以提供每秒10万QPS.

技术图片

 

 8.redis持久化方式? 

RDB:数据周期性持久化

AOF:指令作日志记录,redis重启后回放AOF日志,重构数据

9.redis的雪崩和穿透?

雪崩:redis挂,导致数据库挂,最后导致系统挂

  • 事前:redis高可用,主从+哨兵,避免全盘奔溃
  • 事中:本地ehcache缓存+hystrix限流&降级,避免mysql被打死
  • 事后:redis持久化,快读恢复数据

穿透:恶意请求,redis中没有,直接查数据库,导致数据库挂了

  • 缓存请求null值,恶意请求再来的时候,缓存中就有了,直接返回。eg:set -11 unknown

10.如何保证缓存与数据库的双写一致性?

读请求和写请求串行化,串行到一个队列中去,这样就可以保证,一定不会出现不一致的情况,但它会导致吞吐量大幅度减低。所以系统不是严格要求必须一致性的化,不建议做这样的方案。

11.redis的并发竞争问题解决方案

redis的分布式锁或者zk的分布式锁,推荐zk,需要value中带有时间戳

12 .redis线上部署

技术图片

 

以上是关于面试--缓存的主要内容,如果未能解决你的问题,请参考以下文章

Redis网红高频面试题三连:缓存穿透?缓存击穿?缓存雪崩?

Android 面试 | 开源库面试题

面试官:你能写个LRU缓存吗?

面试中问到HIBERNATE的缓存机制请问下该怎么回答

遇到的面试官都是架构师级别,手撕面试官

面试:高频面试题:如何保证缓存与数据库的双写一致性?