Redis新版本发布,你还认为Redis是单线程?
Redis从单线程到多线程的转变
- Redis简介
- Redis单线程时代
- `“单线程”`的Redis为什么会这么快?
- Redis的瓶颈
- 6.0版本后的Redis线程问题
- redis的多线程不是你理解的多线程
- redis的多线程是默认关闭的
Redis简介
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
Redis单线程时代
- Redis在起初严格意义上也不算纯粹的单线程
单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。比如持久化时,Redis就会开启一个子线程去操作。
“单线程”
的Redis为什么会这么快?
Redis被广泛应用于缓存,一切皆源于Redis基于内存计算,它的读取速度要比寻常的RMDB(关系型数据库)快上很多。
- Redis每秒可执行大约110000次的设置(SET)操作,每秒大约可执行81000次的读取/获取(GET)操作。
- Redis操作具有原子性,能保证并发情况下数据的安全性。
- Rdis采用请求上的
单线程
,避免了不必要的上下文切换和线程间的资源竞争。- Redis采用了如非阻塞IO模型、IO的多路复用等多种IO模型。
Redis的瓶颈
先来看Redis的特性,Redis是基于内存进行操作的NoSql数据库。
- 首先
CPU
不会成为Redis的瓶颈,这也是为什么单线程的Redis依然恐怖如斯的写照- Redis多用于高并发下做缓存,所以Redis的瓶颈最有可能是机器
内存
的大小或者网络带宽
6.0版本后的Redis线程问题
Redis的作者在 2019-12-19 发布了Redis 6.0 RC1,但是即便是这种大佬也没有逃过“真香定律”,Redis居然开始走上了多线程的潮流路线。也就是说从6.0
开始Redis就是多线程
的了,这也就意味着以后面试又多一个坑!
作者在自己博客中对新特性的介绍
原文地址:Redis 6.0 RC1 作者博客原文
Redis 6 被称为是 Redis 有史以来最大的一个版本,就在2020年五一期间,6.0稳定版本发布了。下面单就线程方面先了解一下新版本特性:
redis的多线程不是你理解的多线程
- 但跟 Memcached 这种从 IO 处理到数据访问多线程的实现模式有些差异。Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程。之所以这么设计是不想因为多线程而变得复杂,需要去控制 key、lua(一种轻量级脚本语言)、事务,LPUSH/LPOP(redis语法:将一个或多个值插入到列表头部(左边)、移出并获取列表的第一个元素(左边)) 等等的并发问题
- 主线程负责接收连接请求,读事件到来(收到请求)则放到一个全局等待读处理队列
- 主线程处理完读事件之后,通过 RR(Round Robin) 将这些连接分配给这些 IO 线程,然后主线程忙等待(spinlock 的效果)状态
- IO 线程将请求数据读取并解析完成(这里只是读数据和解析并不执行)
- 主线程执行所有命令并清空整个请求等待读处理队列(执行部分串行)
redis的多线程是默认关闭的
- Redis6.0的多线程默认是禁用的,只使用主线程。如需开启需要修改
redis.conf
配置文件:io-threads-do-reads yes
- 线程数设置通过修改
redis.conf
配置文件:io-threads
属性指定线程数量。关于线程数的设置,官方有一个建议:4核的机器建议设置为2或3个线程,8核的建议设置为6个线程,线程数一定要小于机器核数。还需要注意的是,线程数并不是越大越好,官方认为超过了8个基本就没什么意义了。- 性能方面,Redis作者在RedisConf 2019的分享中提到,
开启多线程后的Redis性能可以提升一倍左右
。
Redis新版本发布,你还认为Redis是单线程?相关推荐
- 你还不了解Redis的发布/订阅功能与Redis的Stream吗
一.Redis 中的发布/订阅功能 发布/ 订阅系统 是 Web 系统中比较常用的一个功能.简单点说就是 发布者发布消息,订阅者接受消息,这有点类似于我们的报纸/ 杂志社之类的: (借用前边的一张图) ...
- redis java 发布订阅_【Redis学习系列】Redis发布订阅
Redis 发布订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了 ...
- .net core 使用Redis的发布订阅
Redis是一个性能非常强劲的内存数据库,它一般是作为缓存来使用,但是他不仅仅可以用来作为缓存,比如著名的分布式框架dubbo就可以用Redis来做服务注册中心.接下来介绍一下.net core 使用 ...
- Redis 笔记系列(十一)——Redis的发布和订阅机制
2019独角兽企业重金招聘Python工程师标准>>> 本文说的redis功能没啥大用处,大家知道有这回事情就好,我一笔带过. Redis的发布订阅 这是什么 进程间的一种消息通信模 ...
- 面试被问到Redis实现发布与订阅,手摸手教
简介 Redis发布与发布功能(Pub/Sub)是基于事件座位基本的通信机制,是目前应用比较普遍的通信模型,它的目的主要是解除消息的发布者与订阅者之间的耦合关系. Redis作为消息发布和订阅之间的服 ...
- Redis实现发布与订阅(转)
简介 Redis发布与发布功能(Pub/Sub)是基于事件座位基本的通信机制,是目前应用比较普遍的通信模型,它的目的主要是解除消息的发布者与订阅者之间的耦合关系. Redis作为消息发布和订阅之间的服 ...
- Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁
1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...
- nginx+lua+redis 灰度发布实现方案
背景: 公司要把现有的某传统项目进行微服务化,拆分后要分批次预发布,实现某部分使用户使用微服务模块,其他用户使用传统项目.待微服务稳定.无bug后全部用户迁移至微服务系统. 以上为背景,实现此方案使用 ...
- 补习系列(13)-springboot redis 与发布订阅
目录 一.订阅发布 常见应用 二.Redis 与订阅发布 三.SpringBoot 与订阅发布 A. 消息模型 B. 序列化 C. 发布消息 D. 接收消息 小结 一.订阅发布 订阅发布是一种常见的设 ...
最新文章
- 爱了!安利一个相见恨晚的可视化学习网站
- Android的WebView控件载入网页显示速度慢的究极解决方案
- 压缩目录Linux常用的几种文件压缩解压方法
- 树言树语:谁动了苹果的弦
- win7 64 安装scikit-learn
- 理解 Android Build 系统
- Exchange2007 系列一:Exchange2007安装
- python发动机曲轴连杆动力学计算
- 三大特性--多态和多态性
- div中内部div横向布局
- oracle 942出错,oracle升级后exp出现oracle942错误
- mysql压测宕机_MySQL压测时Linux中断异常飚高,原来是因为...
- 祝你元宵节快乐!今朝逢元夜,花与灯依旧。众里寻他千百度。蓦然回首,那人却在,灯火阑珊处。...
- 美媒称俄黑客造成卡塔尔断交潮 俄:啥事都栽给我
- 再携手,齐并进!菊风助力宁波银行坐席PUSH外呼项目
- 腾讯云直播是什么?操作文档
- 十几套IT培训视频教程免费下载,为你节省几万元培训费用
- 微信小程序开发聊天室——实时聊天,支持图片预览
- 大数据Flink安装部署
- 电子商务中数据分析的八大指标体系