redis 十. 线程基础

目录

  • 一. redis 基础复习与了解redis6
  • 二. redis 线程问题
    • 总结

一. redis 基础复习与了解redis6

  1. redis官网, redis中文网站, redis命令参考网站
  2. 此处以redis6.0.8或以上版本为例(查看自己redis版本命令"redis- server -v")
  3. 按照redis6以上版本测试使用时,redis.conf下需要改几个配置
    在这里插入图片描述
  4. redis 将所有数据放到内存中,内存的响应时长大约为100纳秒,对于小数据包,redis可以达到8w到10w的qps
  5. redis6中,多线程机制默认是关闭的,开启需要在redis.cnf中配置两个地方

io- threads- do- reads :修改为yes
io- threads: 设置规则: 如果cup为4 建议设置为2-3,如果cpu为8建议设置为6,线程数一定要小于cpu数
在这里插入图片描述

  1. 要达到redis6多线程最佳性能,redis要安装到Linux或Unix系统,原因: 这两个系统底层有select, poll, epoll 三个函数,而redis6依靠epoll个函数

二. redis 线程问题

  1. 单线程: redis4版本以前是单线程单线程的优点,数据结构简单,减少锁的开销,减少线程切换时上下文的切换,提高qps(注意点: 客户端到redis服务端是单线程,redis服务端内部提供了IO多路复用器,通过多路复用器管理连接到redis上的所有线程请求,无阻塞获取请求将请求交给文件事件处理器)
  2. 单线程为什么快

1)基于内存,
2)数据结构是专门设计的,这些数据结构在查找和操作是时间复杂度大部分都是0(1)
3)多路复用和非阻塞io: 使用io多路复用来监听多个socket客户端连接,达到一个线程连接处理多个请求,减少线程接口的开销,同时避免io阻塞,线程间的上下文切换

  1. redis4以后就不再是单纯的单线程,加入了异步删除

加入异步删除的原因: 假设我们往redis中set了一个很大的数据,后续不需要了,想执行del删除掉,如果这个key有20g由于惰性删除的问题删不掉(后续会讲),并且在删除期间如果再有请求进来会一直阻塞等待
在这里插入图片描述

  1. redis由单线程进化到多线程的原因(官方大概意思): redis是基于内存的原因认为redis的瓶颈可能存在内存大小或网络带宽上,所以加入了多线程,例如: 正常情况下del指令可以很快的删除数据,而当被删除的key是一个非常大的对象时,比如包含成千上万个元素的hash集合,那么这个del指令就会造成redis主线程卡顿,所以redis4中加入了异步删除,常见的几个命令有(简单解释从redis主线程剥离,交由bio子线程处理,减少主线程的阻塞时间,减少又有删除带来的性能及稳定问题)
  1. UNLINK key: 指令, 与del区别是, UNLINK可以理解为将键与键空间断开连接, 会执行命令之外的线程中执行实际的内存回收,不会阻塞
  2. flushdb async: 其中FLUSHDB 命令会遍历用户正在使用的数据库,移除其中包含的所有键值对,4.0版本后增加了async, 此时执行数据库清理操作将放在后台线程里面以异步方式进行,这样一来 FLUSHDB 命令就不会再阻塞服务器了
  3. flushall async: 与上一个命令大致相同异步清理实例数据
  1. 总结来说: redis是单线程的,redis4为了解决大key删除问题增加了异步删除,redis使用IO多路复用,可以这样理解redis工作线程客户端到redis服务器是单线程,redis服务器内部处理是多线程

总结

  1. redis4以前使用单线程,redis4后增加了异步删除,解决了删除大key,大数据阻塞问题,并且采用io多路复用
    redis采用IO多路复用,将网络数据的读写,请求解析通过多个IO线程来处理,对于真正执行的命令仍有主线程一个来操作,多个IO线程解决网络IO问题,单个工作线程,保证线程安全
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4351.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Baklib:企业知识管理帮助文档制作平台

在当今的商业环境中,企业面临着越来越多的挑战。其中之一是如何管理并传递企业内部的知识。企业知识管理的重要性不言而喻,它可以帮助企业更好地组织和利用内部的知识资源,提高生产力和竞争力。而Baklib作为一款企业知识管理&帮助文档制作…

新四级强化辅导

词汇题(55道) 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词,主句谓语动词think over后面缺宾语,后面的宾语从句谓语动…

聚焦“专精特新” 共话高质量发展

3月23日,第七届杭州全球企业家论坛暨第三届中国专精特新企业(新三板)高峰论坛在杭州国博中心成功举办。超过500位专精特新企业代表、专家学者、政府部门代表、科研院所代表共聚一堂,现场座无虚席,气氛热烈。本届峰会以…

SQL Server 2016安装教程

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥欢迎订阅系列专栏:SQL Server 2016从入门到精通🥇 &#x1f4…

借东风拉马力,龙头券商东方财富发展持续向好

3月17日,互联网券商东方财富公布2022年年报。具体来看,东方财富2022年实现总营收124.9亿元,同比下滑4.6%;归母净利润85.1亿元,同比下滑0.5%,略低于预期。其中,2022年第四季度总营收同比下滑15.4…

【Python课堂】使用Akshare高效获得A股可转债的重要信息

文章目录前言一、准备二、获取基本信息1.引入库2.读入数据3.获取行情数据4.可转债比价表总结前言 Akshare是一个非常好用的开源A股数据获取模块,它是基于 Python 的财经数据接口库,目的是实现对A股、美股、期货等金融产品的基本面数据、实时和历史行情数…

【干货】交换机管理

实验目的 熟悉掌握交换机的管理,包括:密码恢复,IOS升级和备份,IOS恢复 掌握实际工程中控制线的操作 交换机管理(一) 交换机密码恢复(以下实验都需要在真机上操作) 控制线和电脑的连…

oracle语句查询时间范围

oracle语句查询时间范围 参考网址 : https://blog.csdn.net/weixin_36436373/article/details/116541220?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167930069316800188562500%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%25…

Web自动化测试入门

1.Web自动化测试的价值(为什么要做web自动化测试) 我们可以使用脚本语言代替人来进行测试 2.Web自动化测试相关技术: Selenium:支持多语言,行业内最火最主流Pytest/JUnit5:最好用最全面的单元测试框架Allure:测试报告3.Web自动化…

多线程应用:定时器

一. 定时器 定时器(定时任务) 定时器是一种控制任务延时调用,或者周期调用的技术。作用:闹钟、定时邮件发送。 定时器的实现方式 方式一:Timer方式二:ScheduledExecutorService 二. Timer定时器 TimerTask继承了Runnable&#…

APT、对称加密、非对称加密、SSL工作过程技术的介绍

1. APT的简单介绍APT全称:Advanced Persistent Threat 高级可持续威胁攻击。指的是某组织对特定对象展开持续有效的攻击活动。这种攻击活动具有极强的隐蔽性和针对性,通常会运用受感染的各种介质,供应链和社会工程学等手段,实施先…

【Vue全家桶】细说slot

【Vue全家桶】细说slot 文章目录【Vue全家桶】细说slot前言一、认识插槽Slot1.1 插槽的基本使用二、插槽的使用2.1 默认内容2.2 剧名插槽2.3 作用域插槽前言 我们已经了解到组件能够接收任意类型的 JavaScript 值作为 props,但组件要如何接收模板内容呢?…

【翻译】使用Go生成一个随机字符串(密码)

来源: Generate a random string (password) YourBasic Go https://yourbasic.org/golang/generate-random-string/ Random string 随机字符串 This code generates a random string of numbers and characters from the Swedish alphabet (which includes the non…

Linux内核查询

使用uname命令查找Linux内核 uname是用于获取系统信息的Linux命令。您也可以使用它来确定您使用的是32位还是64位系统。 打开一个终端并使用以下命令: [linuxmilinux:~/www.xxx.com]$ uname -r 输出将类似于以下内容: 5.3.0-28-generic 这意味着您正在…

【CocosCreator入门】CocosCreator组件学习 | Sprite(精灵)组件

Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中 Sprite 组件是最常用的之一。Sprite 组件用于渲染 2D 图像,并提供了许多可配置的选项,如图像纹理、尺寸、位置、旋转等。在本文中,我们将深入探讨 …

如何成为一个优秀的产品经理?

通过本文您可以清楚地了解产品经理的角色和职责,教您如何摇身一变成为优秀的产品经理的技巧等。 一、什么是产品经理? 产品经理主要的职责在于确定客户需求、将产品或功能实现商业目标的最大化、将产品打造成最终成功的样子,并召集团队将这…

python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

什么是接口测试 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。  一般来说,测试接…

【Qt】Qt单元测试详解(一):通过QtCreator创建测试工程

1、简述 Qt程序支持多种测试框架,其中QtCreator可以协助创建4种测试框架,分别是: Boost的测试框架——Boost.Test Google测试框架——GTest Qt测试框架——QTest Qt Quick测试框架——QtQuickTest其他框架需要自行创建:Catch2、CTest 2、QtCreator创建测试工程 2.1 创建…

jenkins+sonarqube+自动部署服务

一、jenkins 配置Pipeline 二、新建共享库执行脚本 共享库可以是一个普通的gitlab项目,目录结构如下 三、添加到共享库 Jenkins Dashboard–>系统管理–>系统配置–>Global Pipeline Libraries Name: 共享库名称,自定义即可; Defa…

从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。随着小卫星星座的普及,对地观测已具备多次以上的全球覆盖…