ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis之高并发

2021-09-11 09:00:50  阅读:165  来源: 互联网

标签:单线程 Redis 阻塞 并发 线程 IO 之高


目录

Redis 处理高并发

1 阻塞IO与非阻塞IO

Java在JDK1.4中引用NIO,阻塞IO与非阻塞IO的区别

在阻塞模式下,如果从数据流中读取不到指定大小的数据两,IO 就会阻塞。比如已知会有 10 个字节发送过来,但是目前只收到 4 个,还剩六个,此时就会发生阻塞。如果是非阻塞模式,虽然此时只收到 4 个字节,但是读到 4 个字节就会立即返回,不会等着,等另外 6 个字节来的时候,再去继续读取。

所以阻塞 IO 性能低于 非阻塞 IO。

如果有一个 Web 服务器,使用阻塞 IO 来处理请求,那么每一个请求都需要开启一个新的线程;但是如果使用了非阻塞 IO,基本上一个小小线程池就够用了,因为不会发生阻塞,每一个线程都能够高效利用。

2 Redis的线程模型

Redis 是单线程。单线程如何解决高并发问题的?

实际上,能够处理高并发的单线程应用不仅仅是 Redis,除了 Redis 之外,还有 NodeJS、Nginx 等等也是单线程。

Redis 虽然是单线程,但是运行很快,主要有如下几方面原因:

  1. Redis 中的所有数据都是基于内存的,所有的计算也都是内存级别的计算,所以快。
  2. Redis 是单线程的,所以有一些时间复杂度高的指令,可能会导致 Redis 卡顿,例如 keys。
  3. Redis 在处理并发的客户端连接时,使用了非阻塞 IO

在使用非阻塞 IO 时,有一个问题,就是线程如何知道剩下的数据来了?
这里就涉及到一个新的概念叫做多路复用,本质上就是一个事件轮询 API

  1. Redis 会给每一个客户端指令通过队列来排队进行顺序处理。
  2. Redis 做出响应时,也会有一个响应的队列。

标签:单线程,Redis,阻塞,并发,线程,IO,之高
来源: https://www.cnblogs.com/Ishton/p/15253745.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有