Redis高可用高性能缓存的应用系列2 - 事务机制和IO多路复用、持久化

news2024/11/15 9:44:20

概述

Redis高可用高性能缓存的应用系列的第二篇,主要介绍Redis事务机制和IO多路复用、和持久化的知识点。

Redis事务机制

Redis事务机制,和Mysql有大的不同,分为4步进行执行:

  • 1.事务提交前,先检查命令语法是否正确
  • 2.提交命令后,一定会被执行
  • 3.有命令报错也会执行完
  • 4.不能回滚

Redis事务和批量操作的区别:Redis在执行exec时,命令要么执行,要么都不执行,批量操作不会检查语法。

Redis事务命令说明:

  • multi:告诉Redis开启一个事务(注意只是开启,而不是执行)
  • exec: 告诉Redis开始执行事务
  • discard:告诉Redis取消事务
  • watch:监视某一个键值对,它的作用是在事务执行之前,如果监视的键值被修改,事务会被取消

当执行multi命令后,表明Redis开启一个事务,在执行后续的命令都属于在排队中,执行exec命令时,Redis事务的命令要么全部执行,要么全不执行。

redis-cli> set name "stark"
OK
redis-cli> multi
OK
redis-cli> set name "stark张宇"
QUEUED
redis-cli> set age 33
QUEUED
redis-cli> exec
1) OK
2) OK

如果因为执行的命令语法错误,整个Redis的事务会被服务驳回,全部不执行。

redis-cli> multi
OK
redis-cli> set name "stark张宇"
QUEUED
redis-cli> lpop "changchang" "quanquan" "xiaoshenyang"
QUEUED
redis-cli> exec
(error) wrong number of arguments (given 3, expected 1)

如果语法没有错误,在执行过程中数据有错误抛出,Redis也会全部执行,只要语法正确,命令都会被执行。

redis-cli> multi
OK
redis-cli> set name "stark张宇"
QUEUED
redis-cli> lpop name
QUEUED
redis-cli> exec
1) OK
2) WRONGTYPE Operation against a key holding the wrong kind of value

I/O多路复用

redis_03.png

首先要说明一点,redis采用单线程处理请求, 假设服务器是4核的CPU,只会占用一个,其他3个都不进行参与,在线程处理上是并行的。

Redis 6.0版本后对这里进行了优化,使用了I/O thread概念,Redis 6.0的主进程只做计算,不在参与读写操作,I/O thread 处理上都是并行的关系,充分利用了多核CPU的优势,节省了处理时间,提升了处理请求的性能。

持久化

Redis的数据是保存在内存中的,所以当服务器重启时会造成数据丢失,Redis提供了数据持久化方案,把数据保存到磁盘上,使用文件恢复数据,主要有3种持久化方式:

  • rdb : 生成某一时刻的快照,然后保存在二进制文件中
  • aof :记录每一条命令,追加到文件中,打开可以看到具体的操作记录
  • 混合模式:它是上面两种方式的结合
  1. 手动触发
  • save ,会让Redis处于阻塞状态,直到rdb持久化完成,线上环境要谨慎使用
  • bgsave ,它会fork出一个子进程,用来执行持久化,主进程继续响应客户端请求,它会有短暂的阻塞

2.自动触发

  • 在m秒内,执行命令最终执行的是bgsave

bgsave的执行过程:1)首先,redis主进程fork出子进程,2)子进程会共享子进程的数据,并把主进程设置成read only,然后开始执行持久化的操作,当有新命令要修改数据时,Redis采用写实复制的方法来解决数据不一致的问题。

rdb持久化的优缺点:

优点:

  • 容灾性好,方便备份
  • 性能最大化,fork出一个子进程来操作,对主进程没有影响
  • 数据比较多时,相对于aof启动效率比较高

缺点:

  • 假如中间发生故障,故障期间会造成数据丢失

Aof同步策略

  • appendfsync everysec 每秒同步一次,默认是每秒同步一次
  • appendfsync always 每次操作后要同步一次
  • appendfsync no 由操作系统进行调度

Aof的重写策略:因为在Redis操作的过程中有很多命令都是对同一个key进行操作,会造成大量的命令重复,造成Aof文件过大,而整理出的解决方案。

  • 手动触发,执行bgrewriteaof命令
  • 自动触发

auto-aof-rewrit-precentage:当前Aof文件大小和最后一次重写后的大小之间的比率等于或者是等于指定的增长百分比,如100是代表当前Aof文件是上次重写的两倍时候才重写的。

auto-aof-rewrit-mini-size:当Aof文件大小大于该值时候才可能重写。

优点:数据安全,不会造成数据的丢失
缺点:比rdb重启效率低,运行效率比rdb低

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2023版】基于部标JT808JT1078车载视频位置监控平台介绍-开源项目

演示地址:http://gps.lingx.com 账号:admin 密码:123456 部标/苏标设备入口 IP:47.100.112.218 ; 端口:8808 1.项目背景 “GPS/GPRS车辆智能管理系统”具备车辆实时定位监控、远程监控调度、行驶路线偏移…

ChatGPT帮我和老板吵架,半分钟做了个思维导图...

大家好,我是小z,也可以叫我阿粥最近那个疑似成都电科的截图已经传疯了,贴一张图回味下:这种壮士断腕式的吵法,可以说几乎是单方面的虐杀。但是有朋友问了,在职场中还是有所顾忌,有没有更体面点的…

什么是浪涌保护器防雷过压保护

每年有数十万起雷击和过电压造成的损坏,造成的损失高达数千万元。过压保护装置是电气装置综合保护概念的一部分,可以可靠地防止过压造成的损坏。 过电压损坏 过电压是小于千分之一秒的短暂电压峰值,超过电气设备允许的设计工作电压的许多倍…

因为我没交周报,leader要罚款200元,怎么给他挖坑?能以敲诈勒索罪告他吗?...

没交周报就罚款,这种事你们遇到过吗?一位网友说:leader在群里通知不交周报就罚款,这周罚到他头上,要罚款200元,这种情况怎么办?能定他一个敲诈勒索罪或者抢劫罪吗?最差也要在离职后把…

paddle通过极简方案构建手写数字识别模型

参考: 飞桨PaddlePaddle-源于产业实践的开源深度学习平台 前提条件 在数据处理前,首先要加载飞桨平台与“手写数字识别”模型相关的类库,实现方法如下。 #加载飞桨和相关类库 import paddle from paddle.nn import Linear import paddle.nn…

Spring 之循环依赖

Spring 框架是一个流行的Java应用程序框架,它提供了许多强大的功能,如依赖注入和面向切面编程。然而在使用 Spring 框架时,我们可能会遇到循环依赖的问题。 这种情况发生在两个或多个 Bean 之间相互依赖的情况下,其中一个 Bean 依…

LT8711/LT8712 Type-C转HDMI设计方案|替代LT8711/LT8712芯片|GSV2201可完全替代兼容LT8711/LT8712

LT8711/LT8712 Type-C转HDMI设计方案|替代LT8711/LT8712芯片|GSV2201可完全替代兼容LT8711/LT8712 龙迅(Lontium)的LT8711/LT8712,是一款Type-C转HDMI 4K的视频转换芯片 通过USB Type-C连接器将DP RX视频信号转换为HDMI/DVI TX视频信号。DP…

【jvm系列-03】精通运行时数据区私有区域---虚拟机栈、程序计数器、本地方法栈

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

前端自动化测试之葵花宝典

首先聊一下概念,Web 前端自动化测试是一种通过编写代码来自动化执行 Web 应用程序的测试任务的方法,它通常使用 JavaScript 和测试框架 (如 Selenium、Appium 等) 来实现。 Web 前端自动化测试的优点是可以提高测试效率、减少测试时间和测试成本&#x…

DMA (Direct Memory Access)

DMA(Direct Memory Access):直接存储器访问; 一、DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。 DMA用来提供在外设和存储器之间或者存储器和存储…

初始SpringBoot

初始SpringBoot1. SpringBoot创建和运行1.1. SpringBoot的概念1.2. SpringBoot的优点1.3. SpringBoot的创建1.3.0. 前置工作:安装插件(这是社区版需要做的工作, 专业版可以忽略)1.3.1. 社区版创建方式1.3.2. 专业版创建方式1.3.3. 网页版创建方式1.4. 项目目录介绍1.5. SpringB…

Matlab在线IDE:MATLAB Online介绍与计算定积分案例

目录1、MATLAB Online介绍功能与特点命令行窗口和编辑器窗口适用场景计费方式使用方法2、注册登录3、计算定积分1、MATLAB Online介绍 MATLAB Online是一款在线IDE(集成开发环境),允许用户在Web浏览器中运行MATLAB并使用MATLAB工具箱&#x…

网络安全:内网渗透实例,小白也能看懂内网渗透

一、前言 从 linux 打进去到域环境,到获取域控权限。全篇实操 二、外网打点 1、打开站点,很正常的一个登录界面 2、尝试登录后发现典型的 shiro 特征。 3、使用工具直接打 shiro 反序列化即可。 4、直接上冰蝎马,连接 【一>所有资源获取…

【三十天精通 Vue 3】 第四天 Vue 3的模板语法详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 模板语法概述1. Vue 3 模板语法的简介2. Vue 3 模板…

如虎添翼,强大插件让ChatGPT更加游刃有余

ChatGPT模型是当前人工智能领域中备受瞩目的存在。作为一款强大的自然语言处理模型,它具备跨时代的意义,将深刻影响我们的未来。而强大的插件不仅可以丰富ChatGPT的功能,提高其应对复杂问题的能力。还也可以解决一些常见的错误,如…

springboot打包成jar和war浅析

问题1:一个springboot项目,用mvn install打包成jar,换一台有jdk的机器就直接可以用java -jar 项目名.jar的方式运行,没任何问题,为什么这里不需要tomcat也可以运行了? 问题2:一个springboot项目…

js非常的混乱怎么学才能入门呢?

前言 ES5还是要学的喔,里面有很多重要的概念,跟ES6有着很强的关联性,大致上包括: 变量声明 ES5 使用var关键字来声明变量,而 ES6 引入了 let 和 const 关键字,用于声明块级作用域的变量和常量。这些新的关…

[图神经网络]空间关系感知关系网络(SGRN)-代码解析

!!!这篇不涉及实现,仅从官方代码了解一下输出处理的思路,有机会的话会做实现,照例放出官方代码地址和之前写的论文解读: SGRN网络github项目地址https://github.com/simblah/SGRN_torch[图神经…

利用三个云服务器,搭建MongoDB副本集模式(主从模式)

1. 下载安装mongoDB 首先我们需要在三台服务器上分别下载和安装mongoDB。 1.1. 打开服务器,创建目录 创建目录结构如下图所示:(日志文件会自动创建) 1.2. 下载mongoDB压缩包 把压缩包下载到指定目录(便于后期维护…

ChatGPT大规模封号+停止注册?最火概念会凉吗?

一、背景 这个周末,先是意大利暂时封杀ChatGPT,限制OpenAI处理本国用户信息。 接着,据韩国媒体报道,三星导入ChatGPT不到20天,便曝出机密资料外泄(涉及半导体设备测量资料、产品良率等内容,已…