返回顶部
首页 > 资讯 > 数据库 >什么是Redis多线程
  • 471
分享到

什么是Redis多线程

2024-04-02 19:04:59 471人浏览 独家记忆
摘要

这篇文章主要介绍“什么是Redis多线程”,在日常操作中,相信很多人在什么是Redis多线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Redis多线程”的疑惑有所帮

这篇文章主要介绍“什么是Redis多线程”,在日常操作中,相信很多人在什么是Redis多线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Redis多线程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

周末被一位小同学憋的很窝火。他要和我探讨一下,redis到底是多线程的还是单线程的。这个问题本来比较好解释,但我遇到的却是一个杠精。

答案是显而易见的:redis6,逃不过真香定理,引入了多线程;而在redis6之前,却是单线程的。

也就是说,这不是一个是和否的问题,还涉及到第二维度的版本参与。

可是,这位同学要打我的脸。不知道小姐姐的脸皮很嫩么?摸不得。

“照你的逻辑,redis5是单线程的了?”

“是的。”

“那下面这张截图是怎么回事?”

同学甩给我一张图,并送来一个鄙视的眼神。

什么是Redis多线程

“使用top -Hp 查看。redis5有4个线程。该怎么解释?”

这个问题,我也不知道怎么跟他解释。使用top命令去观测,redis5肯定是多线程的,比如bgsave,aof等,肯定要开启一个线程去操作,否则早就炸了。

按照这个逻辑去说,redis就从来没有单进程过。看着这张图,我陷入了无尽的忧愁。

“Redis是否是单进程,主要是针对Redis的读写操作来说的”。但这句话对于杠精并没有什么信服力。

“写程序要严谨,你们这些人都太不严谨了。多线程就是多线程,你应该问'redis的读写操作到底是不是多线程的'”。

我问你个大头鬼。我并不想再和他交流,因为我为自己的博学感到无地自容。

但他接下来的一个问题,却让我陷入了真正的沉思。

1. redis的多线程有多快?

redis的多线程到底有什么性能提升呢?

官方的说法是:possible to easily speedup two times。可能会比较容易的提升到两倍速度。

我英文不太好,对这种英文的修饰感到很迷惑。既然easily了,为什么还有possible。two times,到底是提升了2倍,还是提升到2倍。

官方说,到底能够提升多少,还要看硬件的能力。

官方推荐,只有你的CPU核数,达到4个的时候,才有必要试一试这个多线程的Feature。

不要用土豪的眼睛盯着我,这种4core的配置,已经打死了大多数公司了。所以Redis贴心的把多线程功能是关闭的。(好像有点语病)

我只能求助那些在一线的前同事们。他们有没有在生产环境,用上这划时代的多线程Redis6x呢?

结果很令我满意,没有!

其中有一个回复我特别满意。他说:“你竟然在问一个停留在jdk1.6的我,跑着windows版本Redis的我,是否用到了Redis6。我还在用着Redis3呢。”

另外一个回复我感到更满意,他说:“滚!”

2. 怎么用?

新技术肯定是要吹捧一下的,否则没人实践踩坑,作为追随者就只能吃翔。

多线程在理论上,肯定是会有性能提升的。一个爸爸赚钱和2个爸爸赚钱,效果自然不一样,只是苦了妈妈了。

Redis6的多线程开启,需要配置一个参数。

io-threads 4

当开启之后,只有出流量使用多线程,如果你想要入流量也走多线程,那也可以配置以下参数。

io-threads-do-reads yes

就这么两个参数,可以看到现在的redis多线程,还是稍显寒碜了一些。

我们把它开启之后,仍然使用top -Hp 查看相关进程,可以看到多了3个io_thd进程。

什么是Redis多线程

这部分逻辑,是在networking.c种实现的。这个文件已经达到了3k多行,也是够庞大的了。

3. Redis为什么又搞多线程了

使用redis-benchmark测试,单机单核的吞吐量,能够达到10w+。

1秒是1000000000纳秒,单次内存操作大约是100纳秒左右,那内存操作可以达到1000w/s的速度。那Redis的瓶颈在哪里呢?

使用perf进行追踪,可以发现它的耗时,主要是体现在sys_write系统调用上,也就是向Socket写数据。

既然瓶颈找到了,那就把它优化掉。redis选择的方式是使用多线程。

我使用benchmark测试了一下,4core的机器,CPU跑满的时候,QPS达到了16w,并没有翻倍(相对于单核的9w/s)。

benchmark 6379 clients 32  164519.20 requests per second  165411.09 requests per second

用这么强的硬件,获得这样有限的性能提升,差强人意。

这就不难解释为什么现在实践的人那么少。出了因为新,还是不够吸引人。

毕竟,4core的机器,我部署上3台redis cluster的实例,理论上会提升三倍呢。

redis配置文件里,有不少内容在注释这个新特性。

4. 怎么实现?

如图,一次redis请求,要建立连接,然后获取操作的命令,然后执行命令,最后将响应的结果写到socket上。

什么是Redis多线程

在redis的多线程模式下,获取、解析命令,以及输出结果着两个过程,可以配置成多线程执行的,因为它毕竟是我们定位到的主要耗时点。

但命令的执行,也就是内存操作,依然是单线程运行的。

这种设计造成了一个特性。

redis现在依然没有多线程的竞争和线程安全问题,因为它的数据读取这一步骤,仍然是单线程的,要排队运行。一些耗时的操作,比如keys *,hgetall等,仍然要注意。

redis并不是传统的Reactor模型,说实话很多东西硬套概念的话肯定只能钻进个头去漏出个尾巴。它也并不是master,worker这种干干净净的类似于memcached的模型,因为它把命令执行操作给抽取出来了。其中缘由,看上面这张图就够了。

到此,关于“什么是Redis多线程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: 什么是Redis多线程

本文链接: https://lsjlt.com/news/61958.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 什么是Redis多线程
    这篇文章主要介绍“什么是Redis多线程”,在日常操作中,相信很多人在什么是Redis多线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Redis多线程”的疑惑有所帮...
    99+
    2024-04-02
  • Redis是单线程还是多线程
    Redis是单线程的,即所有的操作都是由一个线程来处理的。这是因为Redis主要使用内存来存储数据,而内存访问速度非常快,所以单线程...
    99+
    2024-04-09
    Redis
  • redis是不是多线程的
    小编给大家分享一下redis是不是多线程的,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!redis是单线程,单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有...
    99+
    2024-04-02
  • redis属于单线程还是多线程
    小编给大家分享一下redis属于单线程还是多线程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis4.0之前是单线程运行的...
    99+
    2024-04-02
  • Redis线程模型是什么
    这篇文章主要讲解了“Redis线程模型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis线程模型是什么”吧! Redis它是一个单线程的,这一点需要去注意的。首先我们呢会有一个客...
    99+
    2023-06-30
  • 多线程测试redis连接的方法是什么
    多线程测试Redis连接的方法有以下几种:1. 使用线程池:创建一个线程池,每个线程都可以独立地获取Redis连接并执行相应的操作。...
    99+
    2023-09-04
    redis
  • redis中的单线程是什么
    redis中的单线程是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。官方FAQ表示,因为Redis是基于内存的操作,CPU...
    99+
    2024-04-02
  • redis的操作是多线程的
    redis的多线程性使redis服务器可以同时处理来自多个线程的请求,提高了并发处理能力和降低了延迟。redis通过使用i/o多路复用技术实现多线程性,允许单个线程监视多个套接字文件描述...
    99+
    2024-04-20
    redis
  • redis多线程怎么用
    redis 支持多线程操作,以提高并发性和吞吐量。使用pubsub机制,可以在线程之间发送和接收消息;通过线程池,可以高效分配和管理预先创建的线程。注意事项包括线程安全、使用相同redi...
    99+
    2024-05-21
    redis
  • 什么是linux多线程编程
    本篇内容介绍了“什么是linux多线程编程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程分类线程按照其调度者可以分为用户级线程和核心级线...
    99+
    2023-06-09
  • redis中单线程指的是什么
    小编给大家分享一下redis中单线程指的是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!那么为什么Redis是单线程的我们首...
    99+
    2024-04-02
  • 为什么说redis是单线程的
    这篇文章主要介绍为什么说redis是单线程的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久...
    99+
    2024-04-02
  • Redis中线程IO模型是什么
    这篇文章将为大家详细讲解有关Redis中线程IO模型是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis是一个单线程的应用程序,NodeJs、Nginx都是单线...
    99+
    2024-04-02
  • node的多进程和多线程是什么
    今天小编给大家分享一下node的多进程和多线程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
  • 什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
    文章目录 前言我们为什么要使用线程而不是进程来实现并发编程什么是线程进程和线程的区别如何使用Java实现多线程创建线程1.创建一个继承 Thread 类的线程类2.实现 Runnable 接口匿名内部类方式实现 Runnable ...
    99+
    2023-08-19
    java JavaEE 多线程 进程
  • Redis是单线程为什么这么快
    这篇文章给大家分享的是有关Redis是单线程为什么这么快的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.Redis简介Redis是一个开源的内存中的数据结构存储系统,它可以用作...
    99+
    2024-04-02
  • redis怎么实现多线程
    redis 4.0 引入了多线程机制,提升并发处理能力和降低延迟。该架构包含 io 线程和工作线程,工作线程从队列中获取请求并执行 redis 命令。多线程的优势包括提升并发处理能力、降...
    99+
    2024-06-03
    redis
  • java中多线程和线程安全是什么
    这篇文章给大家分享的是有关java中多线程和线程安全是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是进程?电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。比如下图中...
    99+
    2023-06-25
  • android多线程机制是什么
    Android多线程机制是指在Android系统中实现并发执行的一种机制。Android提供了多种多线程机制,包括以下几种:1. A...
    99+
    2023-09-14
    android
  • java多线程机制是什么
    本篇内容主要讲解“java多线程机制是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java多线程机制是什么”吧!一、程序、进程、线程1.1 什么是程序程序(program):是为完成特定任...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作