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主动同步