为什么reids是单线程
我们首先要明白,reids很快,官方表示,因为reids是基于内存的操作,cpu不是reids的瓶颈,redis的瓶颈有可能是机器内存的大小或者网络带宽,既然单线程容易控制,而且cpu不会成为瓶颈,所以采用单线程。
Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写,官方提供的数据是可以达到100000+ 的 QPS (每秒内查询次数)。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差!
Redis为什么这么快
- 以前有个误区,以为:高性能服务器一定是多线程来实现的原因很简单因为误区而导致的:多线程一定比单线程效率高,其实不是,希望大家对cpu,内存、硬盘的速度都有了解
- redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切 换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。redis 用 单个CPU 绑定一块内存 的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的,所以它是单线程处理这个事。在内存的情况下,这个方案就是最佳方案。 因为一次CPU上下文的切换大概在 1500ns 左右。从内存中读取 1MB 的连续数据,耗时大约为 250us, 假设1MB的数据由多个线程读取了1000次,那么就有1000次时间上下文的切换,那么就有1500ns * 1000 = 1500us ,我单线程的读完1MB数据才250us ,你光时间上下文的切换就用了1500us了,我还不 算你每次读一点数据 的时间。
为什么reids是单线程的更多相关文章
- redis 单线程的理解
单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程.其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会 ...
- redis 为什么快
redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大. 不过,因为一般的内存操作都是简单存取操作,线程占用时间相对较短,主要问题在io上,因此,redis这种模型是 ...
- 从此Redis是路人
从此Redis是路人 序言:Redis(Remote DIctionary Server)作为一个开源/C实现/高性能/基于内存的key-value存储系统,相信做Java的小伙伴都不会陌生.Redi ...
- Redis相关面试题
Reids:单线程+io多路复用机制 Redis与Memcached的区别: 一.memcached值是简单字符串,redis支持hash.set.list等复杂数据类型 二.redis可持久化数据, ...
- 学习笔记49_Redis
Redis和memcache区别: 1 . mm是通过客户端驱动实现集群化,Redis是通过服务器配置文件集群 2. redis是可以进行持久化的存储 3. redis提供高级的数据结构,队列,栈都提 ...
- Redis之RDB和AOF持久化介绍
什么是数据库状态 redis是一个键值对的数据库服务器,服务器中通常包含中任意个非空的数据库,而每个数据库又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及他们的键值对统称为数据库状 ...
- redis:安装及基础知识(一)
Redis官网:https://redis.io/ Redis中文网:http://www.redis.cn/ Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. ...
- 什么是redis?Reids的特点是什么?Redis支持的数据类型有哪些?
首先,分布式缓存框架 可以 看成是nosql的一种 (1)什么是redis? redis 是一个基于内存的高性能key-value数据库. (有空再补充,有理解错误或不足欢迎指正) (2)Reids的 ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- js的单线程和异步
前言 说到js的单线程(single threaded)和异步(asynchronous),很多同学不禁会想,这不是自相矛盾么?其实,单线程和异步确实不能同时成为一个语言的特性.js选择了成为单线程的 ...
随机推荐
- windows server的应用软件限流QoS
原因: 生产环境中程序员写的redis调用方法有逻辑问题, 导致流量高达800~900Mbps导致服务器其它网络服务有丢包现象, 他又有别的项目紧急需要修改,只能通过系统自带的QoS临时限流控制. 1 ...
- pandas通过sqlalchemy写入pgsql报错can't adapt type 'numpy.int64'
其实以前也遇到过,后来不了了之,但今天又出现了,还是大概记录下. 我个人习惯按我自己的理解搞事情,只要结果对就行,但不一定对. 分析下原因,突然想到dataframe中有一列全是列表,列表中全是整数, ...
- Spark On Hive
配置 MySQL 通过官网下载并解压: tar -zxvf mysql-8.0.31-el7-x86_64.tar.gz -C /usr/local 重命名: mv mysql-8.0.28-el7- ...
- linux系统过滤ip地址总结
Perl模块用法 安装Perl模块 # 官网地址 https://metacpan.org/pod/Regexp::Common # 下载地址 https://cpan.metacpan.org/au ...
- liunx部署flask项目
如何在linux上部署flask项目 Python3.7 + virtualenv + uwsgi + git + mysql-5.6.45 + nginx 源码编译安装所需要的环境 yum inst ...
- windows 服务 包装模板
github地址: https://github.com/xl711436/Xiaolei.MockService 在 MockServiceInstance.cs 中 对应的方法中添加 对应的逻辑 ...
- 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器
package com.taotao.controller; import com.taotao.common.utils.FtpUtil; import org.apache.commons.net ...
- dvwa sql盲注教程
原文地址:https://www.jianshu.com/p/757626cec742 一.DVWA-SQL Injection(Blind)测试分析 SQL盲注 VS 普通SQL注入: 普通SQL注 ...
- uniapp 通用函数说明
onLoad函数 监听页面加载,在onLoad中发送请求是比较合适的,即页面一加载就发送请求获取数据,option接受其他界面传过来的数据,数据类型为obj onLoad(option) { ...
- 模块一:时间模块、random模块、hashlib模块、日志模块
模块:就是一系列功能的集合体,有以下分类:*解释器内建模块*python标准库(位于python解释器安装目录的lib文件夹下)*第三方模块(通过(pip install 模块名)语法下载到pytho ...