java高频面试题:redis是单线程的吗?

大家好,我是骄阳。

我们面试中经常遇到这样一个问题:redis是单线程的吗?

redis6之前

1. Redis6.0之前真的是单线程吗?

Redis在处理客户端的请求时,包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都是由主线程处理,按照顺序串行处理,这就是所谓的“单线程”,这也是 Redis 对外提供键值存储服务的主要流程。

但如果严格来讲从Redis4.0之后到redis6之前,都不是真正意义上的单线程。

因为除了主线程外,它也有后台线程在处理一些较为缓慢的操作,例如持久化,集群数据同步,清理脏数据、无用连接的释放、大 key 的删除等等。

2. Redis6.0之前为什么不使用多线程?

(1)使用Redis时,几乎不存在CPU成为瓶颈的情况, Redis主要受限于内存和网络。

Redis通过使用pipelining每秒可以处理100万个请求,所以如果应用程序主要使用一些基础的命令(比如key的读取和写入),它几乎不会占用太多CPU。

(2)使用了单线程后,可维护性高。

单线程机制使得 Redis 内部实现的复杂度大大降低,Hash 的Rehash 等线程不安全”的命令都可以无锁进行,且线程安全。

多线程模型虽然在某些方面表现优异,但可能带来线程安全问题,增加了系统复杂度、同时可能存在线程切换、加锁解锁、死锁等造成的性能损耗。

(3)Redis通过AE事件模型以及IO多路复用等技术,处理性能非常高,因此没有必要使用多线程。

好啦,今天的内容就到这里啦,喜欢我的可以点下关注支持一下~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值