【Java面试眼前一亮小技巧】Redis单线程有什么问题呢?

前言

Redis作为常用的缓存方案,在Java面试中是必然会问的,那么在面试过程中有哪些知识点可以让面试官眼前一亮呢,今天我们就来讲一下Redis单线程的一些问题。

面试模拟

面试官:小伙子看你骨骼惊奇,必然是背八股文好手,问你几个Redis的问题吧,Redis为什么这么快来讲讲?
这不简单!

  1. redis基于内存实现,不需要经过磁盘IO
  2. 数据结构高效,动态字符串、跳表等
  3. 数据编码合理,在不同长度使用不同的数据结构,比如说zset 对象中保存的元素个数小于及成员长度小于一定值使用 ziplist 编码,任意条件不满足,则使用 skiplist 编码。
  4. 线程模型合适,I/O多路复用、单线程避免上下文切换

面试官:小伙子不错啊,背的挺熟,那你来说说为什么使用单线程
内心OS:mmp,刚刚不是说了么,你不懂的话我再给你解释解释!
嘴上笑着说:绝大部分请求是纯粹的内存操作,基本不会阻塞,I/O多路复用事件驱动,单线程实现简单,数据结构可以无锁,避免了不必要的上下文切换和竞争条件,单机支持不了并发量了,可以水平扩容,没必要提升代码复杂度。
当然redis单线程指的是实际执行命令的核心模块,还是有多个后台线程的,比如说aof、rdb同步线程,对象删除线程。当然redis6.0后还引入了多线程。

面试官:不错不错,那单线程会有什么问题,说来听听
内心OS:单线程还会有问题嘛?我咋不知道
不知道哎

面试官:回去等通知吧

面试复盘

面试完了,也不知道过没过,上网百度百度到底会有什么问题吧。

在Redis实例没有满负荷状态下基本上是不会有什么问题,因为CPU能够抗住这些并发。但在流量突增,来不及扩容,CPU100%的情况下就会有各种各样奇奇怪怪的问题。比如说:

  1. CPU100%请求开始超时,不响应,这时发现告警开始扩容,但redis单线程满负荷,新的主备关系很难快速建立,假如链接建立了数据同步也会很慢
  2. CPU100%时主从容易断开(心跳不响应),并且100%情况下重连困难
  3. CPU100%也会导致监控请求不响应,导致拿不到实时系统状态,会有奔溃风险
  4. CPU100%情况下还会导致缓存清理不及时,导致淘汰的不一定是过期数据

这些场景都是高并发场景下才会发生的,如果面试时回答这些case,既能体现自己对redis深入理解,也可以表现出自己处理过高并发问题,会让面试官眼前一亮噢!~

欢迎各位大牛斧正~

https://www.jb51.net/article/198542.htm
https://redis.io/topics/benchmarks
https://zhuanlan.zhihu.com/p/76788470

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值