Redis常见面试问题

    技术2022-08-01  66

    Redis常见面试问题

    redis穿透 单用户请求,该数据在数据库中就为空,那么自然在redis中也不可能存在,这也被成为命中率问题. 解决的方案为: 1.简单粗暴 该数据本来为空时,那我们就在redis中set一个该数据为空的值,但是要注意的一点是 过期时间不要设置太长, 2:布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力;

    redis雪崩 redis上面的热数据大面积失效,导致大量的用户请求一下子全落到了数据库中,而对数据库CPU和内存造成压力,严重情况下可能造成系统宕机 解决方案: 1:大多数在系统设计的时候就会考虑大量请求落到数据库的考虑,一般都会通过数据库锁或者队列,来对并发量请求进行处理,来避免这一情况, 2:redis过期时间分散性,一般根据业务需求考虑,redis的数据的过期时间设置分散,从而简单避免这一情况的发生; redis数据类型 1.hash,2.String,3.List,4.set,5.ZSet, ZSet的特别之处 ZSet主要有一个分值权重,可能通过分值进行从小到大的排列; redis击穿 值得一提的是,redis击穿和redis穿透还是略有不同的,redis击穿是一个热门数据,有大量的请求,但是这个redis数据过期时间到来,导致大量的用户请求一下子全落到了数据库中, 解决方案: 在这个数据即将失效的时候,设置一个临时key来锁住这个key,等到请求结束的时候再删除 缓存预热 每当618双十一来临的时候可想这一天的用户请求是难以想象的庞大,所以尽可能的把用户想要访问得热数据提前放到redis内存中,这样当天就会减少数据库的压力,定时更新,提前预热; 缓存更新 1.定时去更新redis; 2.请求的时候判断该数据是否已失效,再从数据库中查询,set到redis中; 为什么redis速度快 1.基于内存去做的,能影响redis速度的只有硬件的限制,内存的大小,Redis的瓶颈最有可能是机器内存的大小或者网络带宽 2.单线程的,不用进行上下文的切换; 3.非阻塞流IO redis的持久机制 1.RDB快照,2.AOF命令记录文件,当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。 redis集群同步问题 1.配置主从同步,2.master主动同步

    Processed: 0.017, SQL: 9