mysql redis的区别

16254daf64614342a8663fe235c0b729.jpg.mysql和redis的数据库类型

 

 

mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。

 

redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。

 

2.mysql的运行机制

 

mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。

 

3.缓存

 

缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。

 

缓存的好处就是读取速度快

 

4.redis数据库

 

redis数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。

 

5.redis和mysql的区别总结

 

(1)类型上

 

从类型上来说,mysql是关系型数据库,redis是缓存数据库

 

(2)作用上

 

mysql用于持久化的存储数据到硬盘,功能强大,速度较慢,基于磁盘,读写速度没有Redis快,但是不受空间容量限制,性价比高

 

redis用于存储使用较为频繁的数据到缓存中,读取速度快,基于内存,读写速度快,也可做持久化,但是内存空间有限,当数据量超过内存空间时,需扩充内存,但内存价格贵

 

(3)需求上

 

mysql和redis因为需求的不同,一般都是配合使用。

需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存储数据在MySQL和Redis之间做同步。

 

Redis持久化

由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。

 

RDB

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

优点

 

存储的文件是紧凑的

 

适合用于备份,方便恢复不同版本的数据

 

适合于容灾恢复,备份文件可以在其他服务器恢复

 

最大化了Redis的性能,备份的时候启动的是子线程,父进程不需要执行IO操作

 

数据保存比AOF要快

 

缺点

 

如果Redis因为没有正确关闭而停止工作是,到上个保存点之间的数据将会丢失

 

由于需要经常fork子线程来进行备份操作,如果数据量很大的话,fork比较耗时,如果cpu性能不够,服务器可能是卡顿。属于数据量大的时候,一个服务器不要部署多个Redis服务。

创建快照有以下5种形式:

1.客户端发送BGSAVE指令,服务端会fork一条子线程将快照写入磁盘

2.客户端发送SAVE指令,服务端在主线程进行写入动作。一般不常使用,一般在内存不够去执行BGSVAE的时候才用

3.设置了SAVE配置项,如SAVE 300 100,那么当“300秒内有100次写入”时,Redus会自动触发BGSAVE命令。如果有多个配置项,任意一个满足,都会触发备份

4.Redis通过SHUTDOWN命令接收到关闭服务器的请求、或者TERM信号时,会执行SAVE命令,这时候会阻塞所有客户端,不在执行客户端发送的任何命令

5.当一个Redis服务器连接另外一个Redis服务器,并像对方发送SYNC命令开始一次复制操作时,如果主服务器目前没有在执行BGSAVE操作,或者主服务器刚刚执行完,那么主服务器就会执行GBSAVE

 

AOF

AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

AOF记录服务器的所有写操作。在服务器重新启动的时候,会把所有的写操作重新执行一遍,从而实现数据备份。当写操作集过大(比原有的数据集还大),Redis 会重写写操作集。

优点

 

使用AOF模式更加的灵活,因为可以有不同的fsync策略

 

AOF是一个日志追加文件,所有不需要定位,就算断电也没有损坏问题,哪怕文件末尾是一个写到一半的命令,redus-check-aof工具也可以很轻易的修复

 

当AOF文件很大的,Redis会自动在后台进行重写。重写是决对安全的,因为Redis是继续往旧的文件里面追加,使用创建当前数据集所需的最小操作集合来创建一个全新的文件,一旦创建完成,Redis就会切换到新文件,开始往新文件进行追加操作

 

AOF包含一个又一个的操作命令,易于理解和解析

缺点

 

对于同样的数据集,AOF文件通常要大于RDB文件

 

AOF可能比RDB要慢,这取决于fsync策略。通常fsync设置为每秒一次的话性能仍然很高,如果关闭sfync,即使在很高的负载下也和RDB一样快。不过,即使在很大的写负载情况下,RDB还是能提供很好的最大延迟保证

 

AOF通过递增的方式更新数据,而RDB快照是从头开始创建,RDB会更健壮和稳定(所以适用于备份)

 

Redis的持久化策略

 

RDB(数据快照模式),定期存储,保存的是数据本身,存储文件是紧凑的

 

AOF(追加模式),每次修改数据时,同步到硬盘(写操作日志),保存的是数据的变更记录

 

如果只希望数据保存在内存中的话,俩种策略都可以关闭

 

也可以同时开启俩种策略,当Redis重启时,AOF文件会用于重建原始数据

 

Redis实现定时任务

Publish / Subscribe

Redis 在 2.0.0 之后推出了 Pub / Sub 的指令,大致就是说一边给 Redis 的特定频道发送消息,另一边从 Redis 的特定频道取值——形成了一个简易的消息队列

 

Redis Keyspace Notifications

在 Redis 里面有一些事件,比如键到期、键被删除等。然后我们可以通过配置一些东西来让 Redis 一旦触发这些事件的时候就往特定的 Channel 推一条消息。注意: Redis的发布/订阅阅后即焚是不支持持久化的, 故如果客户端断开重连则在这期间的消息将丢失!

 

Redis分布式锁

首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:

互斥性。在任意时刻,只有一个客户端能持有锁。

不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。

具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。

解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。Redis分布式锁流程如下:

 

 

 

 

 

在实现的时候要注意的几个关键点:

1、锁信息必须是会过期超时的,不能让一个线程长期占有一个锁而导致死锁;

2、同一时刻只能有一个线程获取到锁。

 

多写Redis

 

 

 

 

 

说明:

组件名叫YeeRedisGroup,基本服务主要有四个,当数据到来的时候,会分别插入二个Redis服务,这二个Redis服务采用的是异地双活的方案,当其中一个Redis服务挂了以后,会将这个Redis服务从可用队列中摘除,放入重试队列中,另一个Redis则会继续使用。同样读取Redis的时候只会从可用队列中读取第一个Redis服务继续读取。

 

Redis的超时删除

·定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作。

·惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。

 

·定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

 

在这三种策略中,第一种和第三种为主动删除策略,而第二种则为被动删除策略。

 

Redis采用的过期策略:惰性删除+定期删除

 

惰性删除流程

在进行get或setnx等操作时,先检查key是否过期,

若过期,删除key,然后执行相应操作;

若没过期,直接执行相应操作

定期删除流程(简单而言,对指定个数个库的每一个库随机删除小于等于指定个数个过期key)

遍历每个数据库(就是redis.conf中配置的"database"数量,默认为16)

检查当前库中的指定个数个key(默认是每个库检查20个key,注意相当于该循环执行20次,循环体时下边的描述)

如果当前库中没有一个key设置了过期时间,直接执行下一个库的遍历

随机获取一个设置了过期时间的key,检查该key是否过期,如果过期,删除key

判断定期删除操作是否已经达到指定时长,若已经达到,直接退出定期删除。

 

RDB对过期key的处理

过期key对RDB没有任何影响

从内存数据库持久化数据到RDB文件

持久化key之前,会检查是否过期,过期的key不进入RDB文件

从RDB文件恢复数据到内存数据库

数据载入数据库之前,会对key先进行过期检查,如果过期,不导入数据库(主库情况)

AOF对过期key的处理

过期key对AOF没有任何影响

从内存数据库持久化数据到AOF文件:

当key过期后,还没有被删除,此时进行执行持久化操作(该key是不会进入aof文件的,因为没有发生修改命令)

当key过期后,在发生删除操作时,程序会向aof文件追加一条del命令(在将来的以aof文件恢复数据的时候该过期的键就会被删掉)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UI 自动化测试框架:PO 模式+数据驱动 【详解版】

目录 1. PO 设计模式简介 什么是 PO 模式? PO 模式的优点 2. 工程结构简介 工程结构 框架特点 3. 工程代码示例 page 包 action 包 business_process 包 util 包 conf 包 1. PO 设计模式简介 什么是 PO 模式? PO(PageObject&am…

PHP8中字符串与数组的转换-PHP8知识详解

在php8中使用explode()函数和implode()函数实现字符串和数组之间的转换。 1、使用explode()函数把字符串按照一定的规则拆分为数组中的元素&#xff0c;并且形成数组。 使用explode()函数把字符串转换数组&#xff0c;示范代码&#xff1a; <?php $string "html,cs…

基于webman的CMS,企业官网通用PHP后台管理系统

2023年9月11日10:47:00 仓库地址&#xff1a; https://gitee.com/open-php/zx-webman-website 还有laravelscui的版本目前还未开源&#xff0c;电商laravel版本差不多&#xff0c;后续在移植webman 算是比较标准的phpvue的项目 CMS&#xff0c;企业官网通用PHP后台管理系统 …

数据库 MVCC 详解

目录 1. 什么是 MVCC&#xff1f; 2. MVCC 的好处&#xff1f; 3. 快照读&#xff1f;当前读分别是什么&#xff1f;怎么理解&#xff1f; 3.1 快照读 3.2 当前读 4. MVCC 实现原理 4.1 隐藏字段 4.2 undo log(版本链) 4.3 readView 5. readView 深层详解 6. 数据库…

企业架构LNMP学习笔记49

Redis数据持久化操作&#xff1a; 数据、持久化&#xff08;数据在服务或者软件重启之后不丢失&#xff09;。 如果数据只存储在内存中&#xff0c;肯定会丢失&#xff0c;实现持久化&#xff0c;就需要把数据存储在磁盘中&#xff08;hdd ssd&#xff09;。 memcached在宕机…

数据集笔记:Beijing-BRT-dataset

XMU-smartdsp/Beijing-BRT-dataset (github.com) 1 数据集介绍 这个数据集包含1,280张图片&#xff0c;标注了16,795名行人&#xff0c;用于人群分析。使用720张图片进行训练&#xff0c;560张图片进行测试。名为"frame"的文件夹包含人群图像。 名为"ground_t…

AB试验(三)一次试验的规范流程

AB试验&#xff08;三&#xff09;一次试验的规范流程 一次完整且规范的A/B试验可参考下图&#xff1a; 确定目标和假设 核心&#xff1a;A/B测试是因果推断&#xff0c;所以我们首先要确定原因和结果。目标决定了结果&#xff0c;而假设又决定了原因。 如何确定 分析问题&am…

【适用于电力系统和音频系统】计算信号的总谐波失真 (THD)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

深眸科技迭代深度学习算法,以AI机器视觉技术扩围工业应用场景

智能制造是制造业数智化转型升级的发展方向&#xff0c;在当前以高端装备制造为核心的工业4.0时代背景下&#xff0c;越来越多的制造企业意识到机器视觉对于提高效率、降低成本&#xff0c;从而提升企业效益的意义。 目前&#xff0c;机器视觉已成为制造业迈向智能制造过程中极…

激光焊如何更准更稳?维视智造激光焊视觉解决方案助力精密制造

激光焊接是一种高能密度、非接触的焊接技术&#xff0c;它利用激光束对工件进行加热和熔化&#xff0c;然后使其在熔池的情况下形成连接。与传统的焊接方法相比&#xff0c;激光焊具有高密度、熔深小、变形小、焊缝质量高、适用性广、自动化程度高等特点&#xff0c;可以实现焊…

【VisualStudio】NuGet包管理器下载缓存packages文件夹过大怎么清理

使用Visual Studio 开发工具时间长了&#xff0c;会发现整个项目的总大小越来越大&#xff0c;默认是存放在电脑系统盘里的&#xff0c;随着Windows11系统常常更新重启&#xff0c;导致系统盘闲置空间越来越小&#xff0c;该怎么办呢。 描述问题 整个解决方案项目会越变越大&…

JVM调优工具

JVM调优工具 Jmap 查看类信息 此命令可以查看内存信息&#xff0c;实例个数以及占用内存大小。 num&#xff1a;序号instances&#xff1a;实例数量bytes&#xff1a;占用空间大小class name&#xff1a;类名称&#xff0c;[C is a char[]&#xff0c;[S is a short[]&#…

Powdersigner + PostgreSql 同步表结构到pg数据库

要用Powdersigner同步表结构到PostgreSql数据库&#xff0c; Powdersigner 版本是 16.5&#xff0c;当前模型是mysql的 1&#xff0c;修改当前模型内容为postgresql的 Database --> Change Current DBMS 选择PostgreSQL 最大版本的&#xff08;因为Powdersigner内置版本一…

Python实现查询一个文件中的pdf文件中的关键字

要求&#xff0c;查询一个文件中的pdf文件中的关键字&#xff0c;输出关键字所在PDF文件的文件名及对应的页数。 import os import PyPDF2def search_pdf_files(folder_path, keywords):# 初始化结果字典&#xff0c;以关键字为键&#xff0c;值为包含关键字的页面和文件名列表…

chrome实用插件分享

colorzilla&#xff08;网页取色器&#xff09; 滴管取色 可以自动获取网页上任何像素或区域的颜色&#xff0c;也可以获取浏览器外部的颜色。 显示元素信息 显示元素的信息&#xff0c;如标签名称、类、id、大小等。 拾色器面板 类似Photoshop软件上的那些功能。 颜色历史…

Delft3D水动力与泥沙运动模拟

目录 第一部分 Delft3D水动力模型的基本原理 第二部分 构建Delft3D模型的基本流程 第三部分 构建Delft3D水动力模型的网格 第四部分 Delft3D水动力模型的运行和后处理 第五部分 Delft3D泥沙运动模型 第六部分 Delft3D泥沙运动模型举例与练习 第七部分 Delft3D泥沙模型进…

山西电力市场日前价格预测【2023-09-20】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-09-20&#xff09;山西电力市场全天平均日前电价为334.70元/MWh。其中&#xff0c;最高日前电价为391.75元/MWh&#xff0c;预计出现在19: 15。最低日前电价为277.77元/MWh&#xff0c;预计…

如何使用IP归属地查询API来追踪网络活动

引言 在当今数字化世界中&#xff0c;了解网络活动的源头和位置对于网络安全、市场研究和用户体验至关重要。IP归属地查询API是一种强大的工具&#xff0c;可以帮助您追踪网络活动并获取有关IP地址的重要信息。本文将探讨如何使用IP归属地查询API来追踪网络活动&#xff0c;以…

基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据库

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1.HOG特征提取 2.GRNN神经网络 3.JAFFE表情数据库 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .....................................…

HI_NAS linux 记录

dev/root 100% 占用解决记录 通过下面的命令查看各文件夹 大小 sudo du --max-depth1 -h # 统计当前文件夹下各个文件夹的大小显示为M 最终发现Var/log 占用很大空间 发现下面两个 log 占用空间很大&#xff0c;直接 rm-rf 即可 HI NAS python3 记录 # 安装pip3 sudo apt u…