redis单线程模型分析

转载 2016年06月02日 08:00:43
摘要 redis原理 底层实现 多线程

redis原理

redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

不过,因为一般的内存操作都是简单存取操作,线程占用时间相对较短,主要问题在io上,因此,redis这种模型是合适的,但是如果某一个线程出现问题导致线程占用很长时间,那么reids的单线程模型效率可想而知.


引自网络:

总体来说快速的原因如下: 
1)绝大部分请求是纯粹的内存操作(非常快速) 
2)采用单线程,避免了不必要的上下文切换和竞争条件 
3)非阻塞IO 
内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间 

这3个条件不是相互独立的,特别是第一条,如果请求都是耗时的,采用单线程吞吐量及性能可想而知了。应该说redis为特殊的场景选择了合适的技术方案。


 关于线程安全问题

redis实际上是采用了线程封闭的观念,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个redis操作的复合操作来说,依然需要锁,而且有可能是分布式锁

redis线程模型

Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler): 文件事件处理器使用 I/O 多路复用(multi...
  • Happy_wu
  • Happy_wu
  • 2017年06月26日 10:20
  • 998

Redis单线程架构

Redis单线程架构 1 单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端...
  • sunhuiliang85
  • sunhuiliang85
  • 2017年06月23日 23:19
  • 2650

Redis与Reactor模式

最近看了Redis的设计与实现,这本书写的还不错,看完后对Redis的理解有很大的帮助。另外,作者整理了一份Redis源码注释,大家可以clone下来阅读。 Redis是开源的缓存数据库,由于其高性...
  • liu136313
  • liu136313
  • 2016年01月15日 00:07
  • 1569

多进程单线程模型与单进程多线程模型之争

服务器,事件 多进程单线程模型典型代表:nginx 单进程多线程模型典型代表:memcached 另外redis, mongodb也可以说是走的“多进程单线程模”模型(集群),只不过作为数据库服务器,...
  • q454684431
  • q454684431
  • 2016年06月17日 12:12
  • 2538

单进程单线程的Redis如何能够高并发

参考文档: (1)http://yaocoder.blog.51cto.com/2668309/888374 (2)http://www.cnblogs.com/syyong/p/6231326....
  • liupeng_qwert
  • liupeng_qwert
  • 2017年08月16日 18:34
  • 2724

Redis为什么是单线程

转自:https://www.zhihu.com/question/23162208 https://www.zhihu.com/question/55818031 Redis为什么是单线程的? 因为...
  • qqqqq1993qqqqq
  • qqqqq1993qqqqq
  • 2017年08月24日 19:03
  • 1254

Redis到底是多线程还是单线程?

网上很多人认为Redis是单线程,但是根据其这么高的效率,然后用windows运行时查看任务管理器发现好像不止一个线程,所以求大神指点确认回答一下。 关注者 ...
  • skiof007
  • skiof007
  • 2017年11月17日 15:59
  • 657

Redis是单线程还是双线程?适用场景及经验总结 road

尊重劳动成功,转载请附上本文链接及作者:jianfeng_soft@163.com   (road)          最近(周五)在与朋友聊天时,聊到他们做游戏服务端用到一个排行榜的功能,自然...
  • zhjf331344937
  • zhjf331344937
  • 2014年03月23日 04:18
  • 8167

利用redis实现的分布式锁

假设一个场景: 在分布式系统中,通常会遇到多个服务器处理同一个业务的场景,我们需要利用某种机制避免并发问题。Java语言中,我们可以通过锁的方式避免单个服务的多线程并发问题,而分布式系统中的并发问题用...
  • yuxxz
  • yuxxz
  • 2016年09月15日 23:33
  • 4044

关于redis的单线程与后台线程的源码分析

前言: 通常大家都会说redis是单线程的,这个理解其实也没错。 redis的命令处理基本上都是单线程处理的,除了个别任务会fork子进程进行处理。 其实redis是个多线程进程,如下图: ...
  • daiyudong2020
  • daiyudong2020
  • 2016年12月28日 12:40
  • 559
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:redis单线程模型分析
举报原因:
原因补充:

(最多只允许输入30个字)