前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis为什么是单线程?为什么这么快?

Redis为什么是单线程?为什么这么快?

原创
作者头像
小明爱吃火锅
发布2023-11-21 17:12:33
2750
发布2023-11-21 17:12:33
举报
文章被收录于专栏:小明说Java小明说Java

Redis 单线程主要是指 Redis 的网络 I/O 和事件处理采用了单线程模型,而不是 Redis 本身的命令处理采用单线程模型。

1.redis启动线程,C语言源码:

0
0

主要有redis-server、持久化(rdb,aof)线程,io线程,jemalloc_bg_thd(后台内存进程管理)

io线程也是后面Redis进行io多路复用的重点

0
0

redis的单线程指的是redis-server的命令处理是单线程。

2.redis 命令处理单线程的目的

单线程的局限性:

不能有耗时操作(磁盘io等),主要影响响应性能(多命令请求,导致部分请求阻塞)

3.redis是不是io密集型还是cpu密集型

io密集型:

磁盘io,有些场景属于,比如持久化,通过fork子线程进行rdb,或者异步线程进行aof刷盘

网络io,有些场景属于,多个客户端连接,数据请求或者返回数据量较大(redis 单线程需要解决)

CPU密集型:据请求或者返回数据量较大,rehash数据迁移(数据字典表扩容的时候)。(redis 单线程需要解决)

所以redis,也得考虑解决密集型。

4.redis为什么不采用多线程

  • 避免上下文切换开销:多线程或多进程模型需要频繁地进行上下文切换,而上下文切换会带来额外的开销和时间消耗。单线程模型避免了这种开销,使得 Redis 可以更快地响应客户端的请求。
  • 避免多线程同步问题:多线程模型需要解决线程之间的同步、死锁等问题,这些问题会极大地影响程序的性能和稳定性。而单线程模型不存在这些问题,因此可以更加简单和高效地实现 Redis。
  • 充分利用 CPU 资源:虽然 Redis 是单线程的,但是它可以通过异步 I/O 操作(如 epoll)来充分利用 CPU 资源,从而提高 Redis 的性能。
  • 简化设计和实现:单线程模型使得 Redis 的设计和实现更加简单明了,减少了开发和维护的难度。
  • 丰富数据类型:由于redis丰富的数据类型,并且每个数据类型有不同的数据结构,加锁复杂,锁的颗粒不好控制
0
0

​我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档