数据库
首页 > 数据库> > Redis面试笔记(二)雪崩、穿透、击穿三连问

Redis面试笔记(二)雪崩、穿透、击穿三连问

作者:互联网

  1. Redis雪崩?

雪崩是指缓存中大批热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量的请求犹如洪水一般涌入,引起数据库压力造成查询阻塞甚至宕机。

解决方案:

  1. Redis穿透?

穿透是指绕过Redis,调用者发起的请求参数(Key)在缓存和数据库中都不存在,通过不存在的key,成功穿透到系统底层,大规模不断发起不存在的Key的检索请求,导致系统压力过大最后故障。

解决方案:

  1. Redis击穿?

击穿:击穿和穿透概念类似,一般是指一个Key被穿透,这个Key是热点Key,同一个Key会被成千上万次请求,比如微博搜索热点排行榜、如果这个Key失效了,就像保险丝熔断了,百万QPS直接压垮数据库。

解决方案:

- 利用互斥锁,简单来说就是在缓存失效的时候,不是直接去Load DB,而是先试用缓存工具的某些带成功操作返回值的操作(Redis SETNX)去Set一个Mutex Key,当操作返回成功时,在进行Load DB的操作,并回设缓存,否则,就重试整个get缓存的方法。
  1. 热点数据问题如何准确定位?
  1. 如何解决热点数据的问题?
  1. 数据库和缓存的双写一致性问题?

在高并发请求下很容易导致数据不一致的问题,如果业务需要保证强一致性,那么建议不要使用缓存。在数据库和缓存数据的删除或者写入过程中,如果有失败的情况,会导致数据的不一致。

解决方案:

伪代码:

redis.del(key)
db.update()
Thread.sleep(500)
redis.del(key)

弊端:结合双删策略+缓存超时设置,这样最差的情况就是在超时时间内数据不一致,又增加了写请求的耗时。

MySQL BinLog增量订阅消费+消息队列+增量数据更新到Redis

  1. 如何实现异步队列?
  1. 如何实现分布式锁?
  1. Redis的主从复制机制?

答:当项目比较大时,可以使用主从架构 Master/Slave机制,Master以写为主,Slave以读为主,Master主节点更新后根据配置,自动同步到从机Slave节点。

主从复制的原理包括旧版同步命令传播,主从复制的代价就是系统复制较重的时候会导致主从延迟,并且根据CAP理论,无法同时保证服务可用性和数据一致性。

  1. Redis对事务的支持?

答:Redis对事务的支持可以概括如下:

标签:三连问,缓存,Key,数据库,Redis,雪崩,key,数据
来源: https://www.cnblogs.com/shine-rainbow/p/12452303.html