令仔学Redis(二)----单线程架构

Redis是一种基于键值对(key-value)的NoSQL数据库,包含多种数据结构。官网上给出的数字是读写性能可以达到10万/秒,可见速度之快。

做个简单的例子,同时开启5个redis客户端,同时执行下面的命令:

incr  number

每一条命令的执行过程都是一样的,发送命令,执行命令,返回结果。

如果是在多线程的情况下,不作任何处理很可能就会造成数据最终结果出现问题。但是Redis不会,Redis的是单线程的处理方式,新的命令并不会立即被执行,而是统一的放到了队列中,一条一条的执行.

这样的处理就不会出现并发的问题。那为什么单线程的情况下还能这么快?通常的来讲,单线程的处理能力要比多线程的处理方式要差,举个例子:10000斤的货物,每一辆车的运载能力是每次1000斤,那么如果只有一辆车的话需要10次才能完成,但是如果有10辆车呢,一次就能完成。 那为什么Redis使用单线程模型就会达到每秒万级别的处理能力?归结为以下三点:

1、纯内存访问,Redis把所有的数据都放到了内存中,内存的响应时间大约在100纳秒,这也是Redis能有百万级别处理能力的重要基础。 2、还有一点就是Redis采用了epoll作为I/O多路复用技术实现。同时Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上消耗太多的时间。关于这一点会在后续的博客中深入的讲解 3、单线程减少了 线程切换和和竟态产生的消耗。

但是单线程还有一个问题:就是对于每个命令的执行时间是有要求的,如果其中的某一个命令执行过长,会造成其他命令的阻塞,这对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

setup.py即将下岗,PEP 518 说明继任者

2447
来自专栏MongoDB中文社区

完美数据迁移-MongoDB Stream的应用

尽管如此,目前还是有许多企业踏上了服务化改造的道路,这其中则免不了”旧改”的各种繁杂事。

1092
来自专栏数据之美

玩转 SHELL 脚本之:Shell 命令 Buffer 知多少?

1、问题: 下午有同学问了这么一个问题: tail -n +$(tail -n1 /root/tmp/n) -F /root/tmp/ip.txt 2>...

3476
来自专栏木头编程 - moTzxx

微信公众平台开发[2] —— 微信端分享功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

6202
来自专栏windealli

后台开发必备知识——过载、过载保护、过载预防

系统过载处理不当会造成服务器雪崩: 系统过载时,CPU、内存等资源达到瓶颈,系统响应会变慢。这时可能会发生大量的请求重试或系统内部重试,进一步加剧系统负载,产生...

8013
来自专栏owent

关于BUS通信系统的一些思考(一)

如何保证一个进程或线程能安全稳定地把一段消息发送到另一个进程和线程,甚至是另一台机器的进程或线程,再或是要通过代理转发到另一个进程或线程,一直是一个比较麻烦的问...

1221
来自专栏坚毅的PHP

node.js进阶学习

简介 如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:“Node 究竟是什么东西?”尽管不是针对所有人的,但 Nod...

4347
来自专栏架构师之路

为什么说要搞定微服务架构,先搞定RPC框架?

第一章聊了【“为什么要进行服务化,服务化究竟解决什么问题”】 第二章聊了【“微服务的服务粒度选型”】 今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践...

3908
来自专栏phodal

如何设计完善的构建系统,为日常开发提速一倍

在搭建开发环境的构建系统时,我们关注二点: 提高效率,对于大部分事务的自动化,如自动编译代码、自动重启服务。 代码质量,编码完成时,我们则转而关注于代码的质量。...

1967
来自专栏崔庆才的专栏

对你没有看错!不到 10 行代码完成抖音热门视频的爬取!

最近研究了一下抖音的爬虫,目前实现了热门话题和热门音乐下面所有相关视频的爬取,并且我已经将该爬虫打包成了一个 Python 库并发布,名称就叫做 douyin,...

2243

扫码关注云+社区