Redis-Redis常见面试题。

it2025-04-23  38

文章目录

前言1.缓存穿透2.缓存击穿3.缓存雪崩4.redis是单线程的,为啥还那么快?

前言

  关于redis的面试题网上有很多很多,都成了八股文了,我遇到的大概也就这么几个问题,还有一个问题比较随性:在项目中你是怎么使用redis的,都用来做了啥啊?答:噼里啪啦…

1.缓存穿透

  当一个查询请求过来,缓存没有命中,也就是说Redis内存数据库没有,于是查询MySQL等数据,结果也没有,于是本次查询失败。当多用户发同一请求时,会给数据库造成很大的压力。

  解决方案:   1)缓存空对象: 即使查询结果为空也缓存起来并设置过期时间,也可以保护数据库。     导致的新问题:a)如果空值被缓存起来,越来越多的空值占用内存空间;     b)即使设置了过期时间,假如未过期时,数据库有了该结果,就会导致数据不一致的问题。

  2)布隆过滤器: 在控制层先进行校验,不符合则弃掉,从而避免对数据库系统过多压力;

2.缓存击穿

  缓存击穿是指热key问题,大量并发集中对一个点进行访问,当这个key在失效的瞬间,持续的大并发击穿缓存,直接请求数据库,造成数据库巨大压力。

  解决方案:   1)设置热点数据永不过期;   2)加互斥锁:使用分布式锁,保证对每个key同时只有一个线程去查询后端服务,其他线程没有权限则等待,将压力转移到了分布式锁上…

3.缓存雪崩

  在某一时间段,缓存集中过期失效。所有请求都未命中,就只能去查询数据库,导致数据库压力变大。

  解决方案:     1)redis高可用,多搞几台redis,挂掉一个还有其他的提供服务;     2)限流降级:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量;     3)数据预热:就是把有可能的访问量大的数据先预先访问一下,让其加载到缓存中。

4.redis是单线程的,为啥还那么快?

  从速度上来看,CPU>内存>硬盘。我们应该明白高性能的服务器不一定是多线程的,多线程也不一定比单线程效率高,因为多线程的情况,CPU要进行上下文切换,比较耗费时间。对于内存系统来说,如果没有上下文切换效率就是最高的,redis是将所有的数据全部存放在内存中的,所以使用单线程去操作效率是最高的,

最新回复(0)