当前位置: 首页 > news >正文

Redis_概述_特性_IO模型

本章要点

  • 掌握NoSql数据库的概念和与sql数据库的区别
  • 初步了解Redis内存数据库
  • 了解Redis内存数据库的优点及其原因
  • 掌握Redis的多线程IO模型
  • 学习Redis的安装和配置

Redis简介

Redis 全称 Remote Dictionary Server 远程字典服务! 使用C语言编写,支持网络,可基于内存也可以持久化的日志型,NoSQL开源内存数据库,其提供多种语言的API Redis是一个key-value存储系统,支持存储的val类型很多,String,List,Set,Zset(sorted set--有序集合) 和Hash

NoSQL

NoSQL (not noly sql) 泛指非关系型数据库.产生主要为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题

种类

我们根据存储的方式有不同的NoSQL数据库种类

  • 键值存储数据库

就像map一样key-value对 代表 Redis

  • 列存储数据库

我们知道关系型数据库是典型的行存储数据库,因为行存储数据库在物理层面上占用的是连续存储空间,不适合海量数据存储,而列存储方式可以实现分布式存储,适合海量存储 代表 Hbase

  • 文档型数据库

就是NoSQL和关系型数据库的结合!最像关系型数据库的NoSQL.代表MongoDB

  • 图形(Graph)数据库

用于存放节点关系的数据库.列如描述不同人间的关系.典型代表 Neo4J

Redis用途

Redis是内存数据库,相比于磁盘存储就是一个快字,所以一般用于做数据缓存!即我们客户端从数据库DBMS查询的数据首先写入到Redis中,然后当下次再有客户端需要访问该条数据,我们只需要直接读取Redis即可!,不仅减少了RT一次http的往返时间,还减少了DBMS的压力!

缓存数据划分: 我们根据Redis缓存于DBMS中数据的同步性划分为2类

  • 实时同步缓存

就是一些实时性数据当DBMS更新后,Redis缓存中的相关数据会立即清楚,当下次请求来临先到DBMS中获取,然后再写入到Redis中

  • 阶段性同步缓存

当DBMS持久层数据更新后,Redis缓存中存放的相关数据并不会立即清除, 允许一段时间Redis缓存中的数据和DBMS中的数据不完全一致!这个时间段就是缓存数据的过期时间!

Redis特性

能够做缓存的技术中间件这么多,我们为何要选择Redis Redis的过人之处在哪呢?

  • 性能极高

Redis的性能是极高,Redis的读操作速度可达到 11w 次/s,写的速度可达到 8w次/s 原因:1.Redis的所有操作都是在内存中进行的 2.Redis用C语言开发 3.Redis源码非常精细

  • 简单稳点

Redis源码很少,早期自由2w行左右,从3.0加入集群功能后代码变成5w行只有.可维护性也高

  • 持久化

虽然Redis是内存数据库,但是也支持持久化操作. 有2种方式 RDB和AOF

  • 高可用集群

Redis提供了高可用的主从集群,可以保证系统的安全性

  • 丰富的数据类型

支持存储的value类型很多.包括 String,List,Set,Zset(sorted set) 和Hash 还有BitMap,HyperLogLog,Geospatial类型 BitMap:一般用于大数据的二值性统计 HyperLogLog:用于数据量庞大的日志做去重操作 Geospatial:地理空间,主要提供地理位置的相关计算

  • 强大的功能

Redis提供了数据过期功能,发布/订阅功能,简单事务功能,还支持Lua脚本扩展功能.

  • 客户端语言广泛

Redis提供了简单的TCP通信协议,编程语言可以方便的接入Redis.

  • 支持ACL权限控制

之前的权限控制十分笨拙,从Redis6开始引入了ACL模块,可以给不同的用户指定不同的权限 ALC: Access Control List 访问控制列表,是一种细粒度的权限控制策略,可以针对任意用户和组进行权限控制, UGO是一种粗粒度的权限控制操作策略

  • 支持多线程IO模型: Redis之前版本采用的是单线程模型,从6.0开始支持多线程模型

Redis的IO模型

Redis客户端提交的请求,然后由Redis处理请求所采用的处理架构,称为Redis的IO模型,不同版本的IO模型不同

单线程模型

对于Redis3.0及之前版本,Redis的IO模型就是纯粹的单线程模型,所有客户端的请求由一个线程处理!

Redis的单线程采用了多路复用技术!

对于多路选择算法参见的有3种:select模型,poll模型,epoll模型

  • poll模型:采用轮询方式,该模型对客户端的就绪处理是有延迟的
  • epoll模型: 采用的是回调的方式

每个客户端如果要向Redis提交请求,需要先建立一个socket连接,并向事件分发器注册一个事件.一旦该事件发生说明该链接已经就绪.然后事件分发器就可以感知到.然后获取到客户端发送的请求,然后放入任务队列,等待处理线处理! 事件分发器会根据不同的事件将任务交给不同的时间处理器处理

混合线程模型

Redis4.0开始就加入了多线程元素,虽然处理客户端请求仍是单线程模型.但是对于一些比较耗时并且不影响客户端响应的操作交给后台其他线程处理 例如持久化操作,对AOF的rewrite,对失效链接的处理等

多线程模型

Redis6.0版本开始,才是真正意义的多线程模型.因为客户端请求的处理采用的是多线程模型

多线程IO模型中的多线程仅仅是用来解析客户端请求,然后解析出请求放入到任务队列.对于具体任务的处理还是右主线程处理!这样用户就无需考虑线程安全问题.无需考虑事务控制.以及像LPUSH/LPOP执行顺序问题.

优缺点总结

  • 单线程模型
  • 优点:可维护性高,性能高.不存在并发读写情况.所以不存在执行顺序的不确定性,不存在切换线程的开销,不存在死锁问题,不存在为了数据安全而进行的加锁/解锁开销
  • 缺点:性能受到影响,由于单线程自会用到一个处理器,所以会有处理器的浪费
  • 多线程模型
  • 优点:其结合了单线程和多线程的优点,并且避开了他们的不足 缺点:该模型没有显示不足.如果非要说缺点的话,他并非是真正意义上的多线程模型,因为真正处理任务的线程仍然是单线程.所以性能有些许影响!

相关文章:

Redis_概述_特性_IO模型

本章要点 掌握NoSql数据库的概念和与sql数据库的区别初步了解Redis内存数据库了解Redis内存数据库的优点及其原因掌握Redis的多线程IO模型学习Redis的安装和配置 Redis简介 Redis 全称 Remote Dictionary Server 远程字典服务! 使用C语言编写,支持网络,可基于内存也可以持久化…...

[论文速览] Sparks of Artificial General Intelligence: Early experiments with GPT-4

Sparks of Artificial General Intelligence: Early experiments with GPT-4 2023.3.22 微软官方发布了目前人类史上最强AI模型 GPT-4 的综合能力评估论文,总所周知,2023年是通用人工智能(Artificial General Intelligence,AGI&a…...

舔狗日记:学姐生日快到了,使用Python把她的照片做成视频当礼物

舔狗日记1前言一、需要调入的模块二、实现合并多张图片转成 mp4 视频三、优化改进一下总结前言 这不是学姐生日快到了,于是我学了一手使用Python来把学姐的照片生成为视频,到时候给她一个惊喜! 好了先不舔了,下面分享一下用pytho…...

从《移动互联网应用程序(App)收集使用个人信息自评估指南》看个人信息保护着力点

为指导应用运营者对自身收集、使用个人信息行为进行自查自纠,2019年3月,应用专项治理工作组发布了《应用违法违规收集使用行为自查自查指南》。个人信息”。随着对App违法收集、使用个人信息行为评价工作的开展和深入,《App违法违规收集、使用…...

电脑0x0000001A蓝屏错误怎么U盘重装系统教学

电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作&…...

Day939.如何小步安全地升级数据库框架 -系统重构实战

如何小步安全地升级数据库框架 Hi,我是阿昌,今天学习记录的是关于如何小步安全地升级数据库框架的内容。 当消息组件的数据存储都是采用 SQL 拼写的方式来操作,这样不便于后续的扩展及维护。除此之外,相比前面的其他重构&#x…...

2023 年十大 API 管理趋势

作者郑玩星,API7.ai 技术工程师。 阅读原文 什么是 API?什么是 API 管理? 近期,AIGC(AI Generated Content,生成式人工智能)在各行业的应用日趋普及。AIGC 服务提供商通过 API 向外部提供其内…...

计算机网络微课堂1-3节

目录 1. TCP/TP协议​编辑 2. 3.调制解调器 4.因特网的组成 5.电路交换 6.分组交换 重要常用 7.报文交换 8.总结电路交换 报文交换和分组交换 9. 1. TCP/TP协议 2. ISP 网络提供商 ISP的三层 国际 国家 和本地 3.调制解调器 什么是调制解调器,它存在的…...

[Eigen中文文档] Array类与元素操作

文档总目录 本文目录什么是Array类?Array类型访问Array中的值加法与减法Array乘法其他按元素操作的运算array和matrix表达式之间的转换英文原文(The Array class and coefficient-wise operations) 本页旨在提供有关如何使用Eigen的Array类的概述和说明。 什么是A…...

python学习,全球有哪些特别好的社区推荐呢?

Surfshark可以访问全球社区学习的surfshark工具使用方法教程:qptool.net/shark.html 以下是一些全球范围内比较受欢迎的 Python 学习社区: 中文社区:csdn.net 优势:本土国语社区,获得相关知识与经验便利。 Python官…...

LC-1042. 不邻接植花(四色问题(染色法))

1042. 不邻接植花 难度中等198 有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。 另外,所有花园 最多 有 3 条路径可以进入…...

python实战应用讲解-【numpy科学计算】scikits-learn模块(附python示例代码)

目录 Numpy 安装scikits-learn 准备工作 具体步骤 Numpy 加载范例数据集 具体步骤...

大数据开发必备面试题Spark篇01

1、Hadoop 和 Spark 的相同点和不同点? Hadoop 底层使用 MapReduce 计算架构,只有 map 和 reduce 两种操作,表达能力比较欠缺,而且在 MR 过程中会重复的读写 hdfs,造成大量的磁盘 io 读写操作,所以适合高时…...

SpringBoot整合xxl-job详细教程

SrpingBoot整合xxl-job,实现任务调度说明调度中心执行器调试整合SpringBoot说明 Xxl-Job是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。Xxl-Job有…...

【MySQL--04】数据类型

文章目录1.数据类型1.1数据类型分类1.2数值类型1.2.1tinyint类型1.2.2bit类型1.2.3小数类型1.2.3.1 float1.2.3.2 decimal1.3字符串类型1.3.1 char1.3.2 varchar1.3.3char和varchar的比较1.4日期和时间类型1.5 enum和set1.5.1 enum1.5.2 set1.5.3 示例1.数据类型 1.1数据类型分…...

git 将其它分支的文件检出到工作区

主要是使用如下命令&#xff1a; git checkout [-f|--ours|--theirs|-m|--conflict<style>] [<tree-ish>] [--] <pathspec>…​覆盖与 pathspec 匹配的文件的内容。当没有给出<tree-ish> (通常是一个commit)时&#xff0c;用 index 中的内容覆盖工作树…...

人工智能的最大危险是什么?

作者&#xff1a;GPT(AI智学习) 链接&#xff1a;https://www.zhihu.com/question/592107303/answer/2966857095 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 首先&#xff1a;人工智能为人类带来了很多益处&…...

rk3568点亮E-ink

rk3568 Android11/12 适配 E-ink “EINK”是英语ElectronicInk的缩写。翻译成中文为“电子墨水”。电子墨水由数百万个微胶囊(Microcapsules)所构成&#xff0c;微胶囊的大小约等同于人类头发的直径。每个微胶囊里含有电泳粒子──带负电荷的白色以及带正电荷的黑色粒子&#…...

如何将Springboot项目通过IDEA打包成jar包,并且转换成可执行文件

首先在IDEA打开你的项目&#xff0c;需要确认项目可以正常运行&#xff0c;然后点击页面右侧的Maven,运行Lifecycle下的package, 此时在项目的target目录下就可以看到一个jar包 这个时候你可以在jar包所在目录下执行cmd窗口&#xff0c;运行 java -jar campus-market-0.0.1-S…...

总结:网卡

一、背景 经常听到eth0&#xff0c;bond0这些概念&#xff0c;好奇他们的区别&#xff0c;于是有了此篇文章记录下。 二、介绍 网卡&#xff1a;即网络接口板&#xff0c;又称网络适配器或NIC (网络接口控制器)&#xff0c;是一块被设计用来允许计算机在计算机网络上进行通讯…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...