Redis -- 单线程模型
失败是成功之母 ——法国作家巴尔扎克

目录
单线程模型
Redis为什么这么快
单线程模型
redis只使用一个线程,处理所有的命令请求,不是说redis服务器进场内部真的就只有一个线程,其实也有多个线程,那就是处理网络和io的线程。
Redis使用单线程架构来实现高性能的内存数据库服务。
下图是两个redis-cli客户端对同一个redis服务器进行+1请求:

在学习java的过程中我们就可以很容易的就知道,这里肯定涉及到一个多线程问题,表面上是自增两次,但是实际上可能只自增了一次。 出现这种问题的原因就是并发。

幸运的是redis并不会发生这种问题。因为redis是单线程模型,保证了接受多个请求,都是串行的执行,多个请求也是需要在请求队列中进行排队一个一个的执行。

redis能够使用单线程模型来进行很好的工作,得益于redis的核心业务逻辑都是短平快。不需要消耗很多的cpu资源就可以执行。
但是他也有弊端,那就是如果一个操作时间过长,那么就会影响其他任务的执行。
说了这么多,既然是单线程,那为什么redis这么快?🧐
Redis为什么这么快
一切的快慢都是有参照物的,那么redis的快的参照物,毫无疑问那就是mysql和SqlServer等关系型数据库。因为redis是直接访问内存,而这些关系型数据库一般都是访问硬盘操作,访问内存的操作肯定比访问硬盘的操作要更加的快速。
其次,redis要做的业务的核心功能更加简单。Redis既是访问内存,干的事也是很简单。关系型数据库mysql对于插入查询都有着更加复杂的功能支持,这样的功能势必要话费更多的开销。例如各种插入,都有各种约束,都会消耗性能,让数据库变慢。
Redis干的活很少,提供的功能也是少了不少。🚀
由于单线程模型,避免了一些不必要的线程竞争开销。
处理网络IO的时候,使用了epoll这样的IO多路复用(一个线程管理多个socket)再加上Redis 自身的事件处理模型将 epoll 中的连接、读写、关闭都转换为事件,不在网络 I/O 上浪费过多的时间。
Redis如何利用多路复用?
一个线程, 就可以管理多个 socket针对 TCP 来说,服务器这边每次要服务一个客户端,都需要给这个客户端安排一个 socket一个服务器服务多个客户端, 同时就有很多个 socket.
这些 socket 上都是无事不刻的在传输数据嘛??? 很多情况下,每个客户端和服务器之间的通信也没那么频繁此时这么多 socket 大部分时间都是 静默的上面是没有数据需要传输的。
同一时刻只有少数的socket是活跃的,如果每一个客户端都生成一个socket,那么线程就多了,系统开销就大了。

虽然单线程给 Redis 带来很多好处,但还是有一个致命的问题:对于单个命令的执行时间都是有要求的。如果某个命令执行过长,会导致其他命令全部处于等待队列中,迟迟等不到响应,造成客户端的阻塞,对于 Redis 这种高性能的服务来说是非常严重的,所以 Redis 是面向快速执行场景的数据库。
所以我们应该避免像keys * 这样的操作。
你确实挺厉害,如果能从第一篇看到这里的话。不过这些大多数是我自己复习的文章,如果能帮到你是最好的,谢谢。
下一篇如下:
Redis -- String 字符串, 计数命令,字符串操作-CSDN博客文章浏览阅读480次,点赞18次,收藏13次。Redis 的String字符串,已经一些常用命令:set ,get , mget , mset , setnx , setex, psetex。计数命令incr,decr,incrby,decrby,incrbyfloat。字符串操作:append, getstrang,setstrange,strlen.https://blog.csdn.net/niceffking/article/details/135952746
相关文章:
Redis -- 单线程模型
失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程,处理所有的命令请求,不是说redis服务器进场内部真的就只有一个线程,其实也有多个线程,那就是处理网络和io的线程。 R…...
C语言第十五弹---操作符(上)
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 操作符 1、操作符的分类 2、二进制和进制转换 2.1、2进制转10进制 2.1.1、10进制转2进制数字 2.2、2进制转8进制和16进制 2.2.2、2进制转16进制 3. 原码、反…...
使用宝塔面板访问MySQL数据库
文章目录 前言一、安装访问工具二、查看数据库总结 前言 前面我们已经部署了前后端项目,但是却不能得到数据库的信息,看有谁再使用你的项目。例如员工、用户等等。本次博客进行讲解如何在宝塔面板里面访问MySQL数据库。 一、安装访问工具 1、打开软件商…...
Win10 双网卡实现同时上内外网
因为需要同时上内网和外网,但公司做了网络隔离,不能同时上内外网,所以多加了块无线网卡,配置双网关实现同时上内外网,互不影响 打开 Windows PowerShell(管理员),输入:ro…...
Django模型(六)
一、其它查询 文档:https://docs.djangoproject.com/zh-hans/4.1/ref/models/querysets/#count 1.1、排序 Queryset.order_by(*fields) 默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的 可以通过使用 order_by 方法在每个 QueryS…...
【Linux】Linux基本指令
目录 1.ls指令 2.cd指令 3.touch指令 4.mkdir指令 5.rmdir指令和rm指令 5.1rmdir指令 5.2rm指令 6.man指令 7.cp指令 8.mv指令 9.cat指令 10.more指令 && less指令 10.1more指令 10.2less指令 11.head指令 && tail指令 11.1head指令 11.2tai…...
stm32中的SPI
SPI的简介 文章目录 SPI的简介物理层协议层基本通讯过程起始和终止信号数据有效性CPOL/CPHA及通讯模式 STM3的SPI特性及架构通讯引脚时钟控制逻辑数据控制逻辑整体控制逻辑通讯过程 代码配置实现指令集结构体的定义SPI时钟信号的定义SPI端口定义SPI命令 flash驱动代码初始化代码…...
ChatGPT可与自定义GPTs一起使用,智能AI代理时代来啦!
1月31日凌晨,OpenAI在社交平台公布了一个超强新功能,可以在ChatGPT中输入“GPTs名字”的方法,调用多个自定义GPTs一起协同工作。 例如,我想开发一款社交APP,1)可以先用专业分析GPTs做一下市场调研…...
《Numpy 简易速速上手小册》第1章:Numpy 基础(2024 最新版)
文章目录 1.1 创建和操作 Numpy 数组1.1.1 基础知识1.1.2 完整案例:多维数据分析1.1.3 拓展案例 1:时间序列数据1.1.4 拓展案例 2:图像数据处理 1.2 数组的索引和切片1.2.1 基础知识1.2.2 完整案例:时间序列分析1.2.3 拓展案例 1&…...
【美团】SaaS技术部-后端研发工程师(海外业务)
部门介绍 美团餐饮系统为餐饮企业提供一站式IT解决方案,帮助餐饮商户实现从供应链管理、生产管理、前厅管理到外卖的数字化经营。美团餐饮系统不仅打通了餐厅和平台,更帮助餐厅连接客人,让商户更了解顾客需求,在帮助商户做商业决…...
linux安装mongodb数据库启动报错? 都是冰红茶滴水儿
先展示报错信息 网上一大推说是关闭不正确导致的,然后给出的解决方法是 ./mongod -f mongodb.conf --repair吊用没有,还是报错: about to fork child process, waiting until server is ready for connections. forked process: 302226 ERROR: child process failed, exited…...
win11安装wsl作为linux子系统并当作服务器
wsl安装 打开控制面板,找到启用或关闭windows功能 开启windows虚拟机监控平台和适用于Linux的Windows子系统,重启电脑。 打开microsoft store搜索ubuntu,找到合适的版本下载安装 输入wsl -l如下所示,即为安装成功。 安装过程比较…...
户用光伏电站的管理包括哪些内容?需要怎么做?
户用光伏电站在运行后需要进行一系列的管理工作,包括安全、运行、质量和数据等等,从而保证电站的安全、经济、高效运行。 1.安全管理 光伏电站的安全管理是非常重要的,包括电站的防雷、防火、防盗等措施,以及电站内部的安全管理…...
Kafka-服务端-PartitionLeaderSelector、ReplicaStateMachine
PartitionLeaderSelector 通过对前面的分析可知,PartitionMachine将Leader副本选举、确定ISR集合的工作委托给了PartitionLeaderSelector接口实现,PartitionMachine可以专注于管理分区状态。这是策略模式的一种典型的应用场景。 图展示了PartitionLead…...
总结11(数组)
数组 1.为什么需要数组 为了解决大量同类型数据的存储和使用问题 为了模拟现实世界 2. 数组的分类 一维数组 1).怎样定义一维数组 为n个变量连续分配存储空间。 所有的变量数据类型必须相同。 所有变量所占的字节大小必须相等。 例子: int a[5]; &#x…...
扩展学习|大数据分析整合到价值创造的大见解
文献来源:Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接:链接:https://pan.baidu.com/s/14IGaCOc-plxAiaVhwOgUvA 提取码…...
蓝桥杯---牌型种数
小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后…...
【Linux】VMware Workstation16安装银河麒麟高级服务器操作系统V10 SP3 AMD64
目录 一、麒麟服务器概述 二、安装步骤 设置硬盘大小 完成配置 修改内存 处理器等设备配置 选择直接安装 配置磁盘 网络配置 设置root账号密码 开始安装 启动完成 一、麒麟服务器概述 银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云…...
中国的茶文化:历史、传统与生活
中国的茶文化:历史、传统与生活 一、引言 茶,这一神奇而古老的饮品,与中国的历史、文化和生活方式紧密相连。中国的茶文化,源远流长,博大精深,是中华文明的重要组成部分。它不仅是一种饮料,更是…...
Oracle函数使用
ROW_NUMBER函数 ROW_NUMBER() OVER(PARTITION BY column1 ORDER BY column2 DESC) -- 根据column1分组按column2降序排序生成序号,序号由小到大,会生成一个唯一的序号 -- 例如column2中有两列值都为1,那他们的序号会有一个在上一个在下ROW_NUMBER() OVER(ORDER BY …...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
