Redis单线程架构
参考链接:
http://blog.csdn.net/qqqqq1993qqqqq/article/details/77538202
单线程模型:
redis中的数据结构并不全是简单的kv,还有list、hash等复杂的结构,这些结构很可能会进行细粒度的操作,比如在很长的列表偶棉添加一个元素,在hash当中或者删除一个对象,这样的一个操作就会添加很多的锁,导致同步的开销大大增加,redis权衡之后选择使用单线程,突出自己功能的灵活性,在单线程基础上任何原子操作都可以无代价的实现,多复杂的数据结构都可以轻松运用
Redis客户端对服务端的每次调用都经历了发送命令、执行命令、返回结果三个过程,其中执行命令阶段,由于redis是单线程来处理命令的,所以每一条到达服务端的命令不会立即执行,所有的命令都会进入一个队列中,然后逐个被执行,并且多个客户端发送的命令的执行顺序是不确定的,但是可以确定的是不会有两个命令被同时执行,不会产生并发问题,这就是redis的单线程基本模型
单线程模型每秒万级别处理能力的原因:
1 纯内存访问,数据存放在内存中,内存的响应时间大约是100ns,这是redis每秒万级别访问的重要基础
2 非阻塞I/O,redis采用epoll作为I/O多路复用技术的实现,再加上redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为了时间,不在I/O上浪费过多的时间
3 单线程避免了线程切换和竞态产生的消耗
4 redis采用单线程模型,每条命令执行如果占用大量时间,会造成其他线程的阻塞,对于redis这种高性能服务是致命的,所以redis是面向高速执行的数据
Redis常见问题:
Redis为什么是单线程的?
因为CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带宽,既然单线程容易实现,而且CPU不会成为瓶颈,那就顺便成章的采用单线程的方案
如果万一CPU成为你的Redis瓶颈了,或者,你就是不想让服务器其他核闲置,那怎么办?
那也很简单,你多起几个Redis进程就好了。Redis是keyvalue数据库,又不是关系数据库,数据之间没有约束。只要客户端分清哪些key放在哪个Redis进程上就可以了。redis-cluster可以帮你做的更好
Redis单线程架构的更多相关文章
- 【Redis破障之路】三:Redis单线程架构
众所周知,Redis是一个单线程架构的NoSQL数据库,但是是单线程模型的Redis为什么性能如此之高?这就是我们接下来要探究学习的内容. 1.Redis的单线程架构 1.1.Redis单线程简介 首 ...
- Redis单线程架构以及工作方式
一.单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程.其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的每一条到达服务端的命令都不会 ...
- 高可用Redis(一):通用命令,数据结构和内部编码,单线程架构
1.通用API 1.1 keys命令和dbsize命令 keys * 遍历所有key keys [pattern] 遍历模式下所有的key dbsize 计算Redis中所有key的总数 例子: 12 ...
- Redis Cluster架构优化
Redis Cluster架构优化 在<全面剖析Redis Cluster原理和应用>中,我们已经详细剖析了现阶段Redis Cluster的缺点: 无中心化架构 Gossip消息的开销 ...
- API的理解和使用——单线程架构
核心知识点: 1.单线程机制:所有命令放在一个队列中 2.为什么Redis单线程这么快?内存中执行.非IO阻塞.避免线程切换和竞态产生的消耗. 3.单线程的问题?一个命令不能执行太长时间,不然会阻塞其 ...
- 理解Redis单线程运行模式
本文首发于:https://mp.weixin.qq.com/s/je4nqCIq6ARhSV2V5Ymmtg 微信公众号:后端技术指南针 0.概述 通过本文将了解到以下内容: Redis服务器采用单 ...
- 关于redis单线程的分析
redis为什么那么快?结论有三点,大家都知道,这里主要是分析. 首先第一点 redis是内存访问的,所以快 当然这个大家都知道,所以不是重点 io密集型和cpu密集型 一般我们把任务分为io密集型和 ...
- Redis云端架构深入浅出
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB 发表于云+社区专栏 作者介绍:邹鹏,腾讯云数据库Redis产品负责人,多年数据库.网络安全研发经验. ...
- Redis单线程原理
redis是以socket方式通信,socket服务端可同时接受多个客户端请求连接,也就是说,redis服务同时面对多个redis客户端连接请求,而redis服务本身是单线程运行. 假设,现在有A,B ...
随机推荐
- 华莱士的 第一个python程序之(用户登录)
Name = "shangzb"password = 43while True: _Name = input("Name:") if _Name == Name ...
- ros 使用笔记
1. publishers/subscribers 常用指令 说明rosnode list 查看所有激活的节点rostopic list 查看所有激活的topicrostopic i ...
- AI之旅(1):出发前的热身运动
前置知识 无 知识地图 自学就像在海中游泳 当初为什么会想要了解机器学习呢,应该只是纯粹的好奇心吧.AI似乎无处不在,又无迹可循.为什么一个程序能在围棋的领域战胜人类,程序真的有那么聪明吗?如 ...
- 复杂透视表的SQL生成方法
一般而言,利用表单查看数据时,会从不同的维度来涉及透视表.比如,从产品和时间维度分析销售数据. 当需要从时间维度去分析时,同时希望能有同比,环比数据,那么将时间维度设计成列将极大方便SQL的编写. 如 ...
- 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
类可以提供一个静态方法,返回类的一个静态实例,如Boolean包装类的一个获取实例的静态方法 public static Boolean valueOf(boolean b) { return (b ...
- sublime text 3搭建python
1.ST3下载地址: http://www.sublimetext.com/3 2.安装Sublime Text Build 3114 Setup.exe应用程序. 3.ST3的工具优点就是轻量级,简 ...
- NYOJ-15:括号匹配(二)
内存限制:64MB 时间限制:1000ms 特判: No 通过数:54 提交数:158 难度:6 题目描述: 给你一个字符串,里面只包含"(",")",&quo ...
- 15个HTML元素方法!
首先让我们来讨论一下 HTML 与 DOM 之间的区别. 显然,普通的 <table> 元素就是一段 HTML 代码,它可以应用在任何一个以 .html 为扩展名的文件中.元素自带一系列特 ...
- Introduction tp Operating System
一.虚拟化 为了让用户告诉操作系统如何利用虚拟机功能,OS提供给应用程序一些接口——系统调用,也会说提供了一个标准库. CPU通过分时达到虚拟化. 内存物理模型只是一个字节数组,读写修改需要制定地址. ...
- HTML相关内容
一,HTML标签的分类 1,单标签和双标签 2,内联标签:span,b,u,i,a,img 块级标签:h1~h6,p,div,hr,ul,ol,li 二,常用标签 1,head内常用标签 标签 含 ...