- 面试追问系列-Spring技术原理
- 面试追问系列-JAVA虚拟机原理
- 面试追问系列-Redis技术原理
企业面试一般不会单纯的就某一知识点直接一问一答,毕竟问题只有那么多,背诵答案容易的多。那么如何鉴定候选人是否掌握了某项技术呢? 更多的是通过不断追问来确认候选人是否真正理解对应的技术,下面是面试过程中涉及Redis的一些关键问题及其一般追问的问题,大家可以尝试下解答下,下面有针对每一个提问有对应的解答提示。也欢迎沟通交流反馈你在面试中所遇到的问题。
- 缓存使用的业务场景有哪些?
- Redis为什么快?
- 为什么采用单线程?
- Redis 6.0之后为什么更改为多线程?
- Redis常用的数据结构有哪些?
- 如何解决缓存热点Key的问题?
- 什么缓冲击穿、缓存穿透、缓存雪崩?
- Redis数据的过期策略有哪些?
存在大规模数据访问,对数据查询效率要求高且数据结构相对简单,不涉及大量的关联查询操作的业务场景下适合用缓存来提升整体的业务体验。 相比较数据库硬盘,缓存一般采用内存能够有效减少磁盘的IO操作,提高数据读写的效率,基本是高并发的互联网应用必不可少的基础服务之一。 具体应用的业务场景有:分布式Session、秒杀库存、分布式锁、会员信息等等。
2. Redis速度为什么快?Redis的速度非常的快,单机的redis就可以支持支撑10万/秒的请求量,主要的原因有以下几点:
- 完全基于内存操作,相比较磁盘IO更快速
- 基于C语言实现,执行效率更高
- 使用单线程,无上下文切换成本
- 基于非阻塞式的IO多路复用机制
因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。
4. Redis常用的数据结构有哪些?- String:字符串,也是比较常用的一种数据结构
- List:链表,可以方便的进行链表的插入和删除,降低整体的成本,主要的应用场景有消息队列
- Hash:哈希对象Map的结构,相当于key没有变化但是Value是一个Map结构
- Set:集合对象,存储不可重复的元素集合
- ZSet:有序集合,排好序的Set,写进去自动根据数据排序
使用缓存本身就是为了解决热点问题的,但是热点数据中还是最热的数据,比如秒杀商品,一瞬间所有流量都会命中单一的Key集中在分布式缓存集群中某一台机器,导致触发单台机器的极限,进而影响到集群其它缓存数据的访问。那么如何解决热点中的热点也是日常过程中需要去重点处理的事情。一般的处理方案有以下几种:
- 多级缓存,针对热点Key在本地端也保存一份
- 将热点Key进行冗余备份到集群中的多台Redis机器中



