redis面试复习
1.redis是单线程还是多线程
无论什么版本工作线程就是是一个,6.x高版本出现了IO多线程
单线程满足redis的串行原子,只不过IO多线程后,把输入/输出放到更多的线程里区并行,好处:
1.执行的时间更短,更快;2.更好的压榨系统以及硬件资源
2.redis存在线程安全的问题吗?为什么
redis可以保障的是内部串行,外界使用的时候要进行保障,业务上需要自行保障
3.缓存穿透
穿透 是没有这个数据,
解决方案:null key 或者布隆过滤器 可以考虑加锁来进行降低请求的次数 或者限流
4.缓存击穿
热点key过期了(或者某个key突然之间成了热点key,但是这个key还没来得及缓存)
解决方案:可以考虑加锁来进行降低请求的次数 或者限流
5.缓存雪崩如何处理
缓存穿透,缓存击穿,缓存雪崩这些现象的本质都是缓存中不存在数据,导致了大量的请求直接到数据库的层面上,让数据库承担了很大的压力,针对这种情况,肯定是要想办法来进行降级对数据库的一些请求量,可以通过加锁来进行降低对数据的压力,加锁完成之后 还是要进行想办法将数据存储到缓存中来
6.缓存是如何回收的
1.后台在轮询,分批分批的删除的过期的key,
2.请求的时候 删除已经过期的key
7.缓存如何进行预热
提前把数据放到redis中,击穿,雪崩的时候 可以将一些数据提前缓存到redis中。
8.缓存和数据不一致 如何进行解决
可以基于canal的binlog同步
9.简述一下主从不一致的问题
redis是弱一致性,锁不能用主从,用单实例/分片集群/redlock
在配置文件中配置必须有多个client链接能同步,趋于强一致性