【day5】Redis持久化之AOF + Redis事务_锁机制

AOF是什么

以日志的形式来记录每个写操作(增量保存),将 Redis 执行过的所有写指令记录下来(比 如 set/del 操作会记录, 读操作 get 不记录

 只许追加文件但不可以改写文件

 redis 启动之初会读取该文件重新构建数据

 redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

 aof文件存储位置跟rbd文件存储设置的位置一致

 持久化流程

1) 客户端的请求写命令会被 append 追加到 AOF 缓冲区内

2) AOF 缓冲区根据 AOF 持久化策略[always,everysec,no]将操作 sync 同步到磁盘的 AOF 文件 中

3) AOF 文件大小超过重写策略或手动重写时,会对 AOF 文件 rewrite 重写,压缩 AOF 文件容 量

4) Redis 服务重启时,会重新 load 加载 AOF 文件中的写操作达到数据恢复的

开启AOF

 在 redis.conf 中配置文件名称,默认为 appendonly.aof

AOF 启动/修复/恢复

正常恢复 

 跟rdb文件备份恢复一样 都是先拷贝一份文件 在进行恢复

异常恢复

1、如遇到 AOF 文件损坏,通过/usr/local/bin/redis-check-aof --fix appendonly.aof 进行恢复 2、建议先: 备份被写坏的 AOF 文件

3、恢复:重启 redis,然后重新加

 同步频率设置

 

1) appendfsync always 谨慎使用
始终同步,每次 Redis 的写入都会立刻记入日志;性能较差但数据完整性比较好

2) appendfsync everysec 默认 每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。

3) appendfsync no redis 不推荐 不主动进行同步,把同步时机交给操作系统

Rewrite 压缩 

 1、rewrite 重写介绍

1) AOF 文件越来越大,需要定期对 AOF 文件进行重写达到压缩

2) 旧的 AOF 文件含有无效命令会被忽略,保留最新的数据命令 , 比如 set a a1 ; set a b1 ; set a c1; 保留最后一条指令就可以了

3) 多条写命令可以合并为一个 , 比如 set a c1 b b1 c c1

4) AOF 重写降低了文件占用空间

5) 更小的 AOF 文件可以更快的被 redis 加载

 重写触发配置

 1) 手动触发 直接调用 bgrewriteaof 命令

2) 自动触发

auto-aof-rewrite-min-size: AOF 文件最小重写大小, 只有当 AOF 文件大小大于该值时候才能 重写, 默认配置 64MB

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

系统载入时或者上次重写完毕时,Redis 会记录此时 AOF 大小,设为 base_size,

如果 Redis 的 AOF 当前大小>= base_size +base_size*100% (默认)且当前 大小>=64mb(默认)的情况下,Redis 会对 AOF 进行重写

 AOF 持久化

优势

1、备份机制更稳健,丢失数据概率更低。

2、可读的日志文本,通过操作 AOF 稳健,可以处理误操作

劣势

1、比起 RDB 占用更多的磁盘空间

2、恢复备份速度要慢

3、每次读写都同步的话,有一定的性能压力

 RDB 还是 AOF?

官方推荐两个都启用


如果只做缓存:如果你只希望你的数据在服务器运行的时候存在, 你也可以不使用任何 持久化方式

 Redis_事务_锁机制

 Redis 的事务是什么

1、Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行

2、事务在执行的过程中,不会被其他客户端发送来的命令请求所打断

3、Redis 事务的主要作用就是串联多个命令防止别的命令插队

 Redis 事务三特性

 单独的隔离操作

1、事务中的所有命令都会序列化、按顺序地执行

2、事务在执行的过程中,不会被其他客户端发送来的命令请求所打断

 没有隔离级别的概念

 队列中的命令(指令), 在没有提交前都不会实际被执行

 不保证原子性

 事务执行过程中, 如果有指令执行失败,其它的指令仍然会被执行, 没有回滚

事务相关指令 Multi(开启事务队列)、Exec(执行)、discard(丢弃/放弃此次组队)

1) 从输入 Multi 命令开始,输入的命令都会依次进入命令队列中,但不会执行(类似 Mysql 的 start transaction 开启事务)

2) 输入 Exec 后,Redis 会将之前的命令队列中的命令依次执行(类似 Mysql 的 commit 提 交事务)

3) 组队的过程中可以通过 discard 来放弃组队(类似 Mysql 的 rollback )

 悲观锁&乐观锁

icon-default.png?t=O83Ahttps://hlz666.blog.csdn.net/article/details/129978116?fromshare=blogdetail&sharetype=blogdetail&sharerId=129978116&sharerefer=PC&sharesource=weixin_60205306&sharefrom=from_link

1) 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修 改,所以每次在拿数据的时候都会上锁

2) 这样别人/其它请求想拿这个数据就会 block 直到它拿到锁。

3) 悲观锁是锁设计理念, 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁, 表锁等,读锁,写锁等,都是在做操作之前先上锁.

 1) 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会 修改,所以不会上锁

2) 但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等 机制。

3) 乐观锁适用于多读的应用类型,这样可以提高吞吐量。Redis 就是利用这种 check-and-set 机制实现事务的

 watch & unwatch

 watch

1、基本语法: watch key [key ...]

2、在执行 multi 之前,先执行 watch key1 [key2],可以监视一个(或多个) key ,如果在 事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断.

 unwatch

1、基本语法 unwatch

2、取消 watch 命令对所有 key 的监视。

3、如果在执行 watch 命令后,exec 命令或 discard 命令先被执行了的话,那么就不 需要再执行 unwatch 了

 

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

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

相关文章

C#补充----反射,特性,迭代器,特殊语法,值类型运用类型。

1.反射。 《1》获取类的方式 《2》反射的应用 <1>获取类型的所有公共成员 <2>获取构造函数 <3>获取类型的 公共成员变量 <4>获取类型的 公共方法 <5>.获取类型的 属性 <6>.公共接口&#xff0c;公共枚举&#xff0c;公共事件

MyBatis——XML映射文件

在MyBatis中&#xff0c;既可以通过注解的方式配置SQL语句&#xff0c;也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句&#xff1a; Delete("delete from user where id#{id}") Integer deleteById(Integer id);但是…

git使用-小白入门2

git使用-小白入门2 分支git branch——显示分支git checkout -b——创建&#xff0c;切换分支git merge——合并分支git log --graph——以图标形式查看分支 推送至远程仓库 分支 在进行多个并行作业时&#xff0c;我们会用到分支。在这类并行开发的过程中&#xff0c;往往同时…

OpenAI Whisper:语音识别技术的革新者—深入架构与参数

当下语音识别技术正以前所未有的速度发展&#xff0c;极大地推动了人机交互的便利性和效率。OpenAI的Whisper系统无疑是这一领域的佼佼者&#xff0c;它凭借其卓越的性能、广泛的适用性和创新的技术架构&#xff0c;正在重新定义语音转文本技术的规则。今天我们一起了解一下Whi…

TiDB常见操作指南:从入门到进阶

TiDB常见操作指南&#xff1a;从入门到进阶 TiDB作为一个分布式数据库&#xff0c;提供了丰富的操作接口和功能。无论是基本的数据库管理&#xff0c;还是更为复杂的分布式事务处理&#xff0c;TiDB都能灵活应对。在这篇文章中&#xff0c;我们将总结几种TiDB常见操作&#xf…

NVIDIA CUDA Linux 官方安装指南

本文翻译自&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions NVIDIA CUDALinux安装指南 CUDA工具包的Linux安装说明。 文章目录 1.导言1.1.系统要求1.2.操作系统支持政策1.3.主机编译器支持政策1.3.1.支持的C方言…

rtthread学习笔记系列(4/5/6/7/15/16)

文章目录 4. 杂项4.1 检查是否否是2的幂 5. 预编译命令void类型和rt_noreturn类型的区别 6.map文件分析7.汇编.s文件7.1 汇编指令7.1.1 BX7.1.2 LR链接寄存器7.1.4 []的作用7.1.4 简单的指令 7.2 MSR7.3 PRIMASK寄存器7.4.中断启用禁用7.3 HardFault_Handler 15 ARM指针寄存器1…

一个使用 Golang 编写的新一代网络爬虫框架,支持JS动态内容爬取

大家好&#xff0c;今天给大家分享一个由ProjectDiscovery组织开发的开源“下一代爬虫框架”Katana&#xff0c;旨在提供高效、灵活且功能丰富的网络爬取体验&#xff0c;适用于各种自动化管道和数据收集任务。 项目介绍 Katana 是 ProjectDiscovery 精心打造的命令行界面&…

【Redis】初识Redis

目录 Redis简介 Redis在内存中存储数据 Redis数据库中的应用 Redis缓存中的应用 Redis消息中间件 尾言 Redis简介 如下是Redis官网中&#xff0c;对Redis的一段描述 在这段描述中&#xff0c;我们提取如下关键要点&#xff1a; Redis主要用于在内存中存储数据Redis可…

IDEA的Git界面(ALT+9)log选项不显示问题小记

IDEA的Git界面ALT9 log选项不显示问题 当前问题idea中log界面什么都不显示其他选项界面正常通过命令查询git日志正常 预期效果解决办法1. 检查 IDEA 的 Git 设置2. 刷新 Git Log (什么都没有大概率是刷新不了)3. 检查分支和日志是否存在4. 清理 IDEA 缓存 (我用这个成功解决)✅…

赤店商城系统点餐小程序多门店分销APP共享股东h5源码saas账号独立版全插件全开源

代码介绍 后端编程语言采用&#xff1a;PHP yii2.0框架 前端代码采用&#xff1a;UNIAPP框架环境要求 推荐选择服务器配置&#xff1a;2核4G内存3M带宽 linux操作系统 控制面板&#xff1a;宝塔面板 运行环境&#xff1a;PHP7.2MYSQL5.7 赤店商城系统是一款集点餐小程序、多门…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>优美的排列

题目&#xff1a; 解析&#xff1a; 部分决策树&#xff1a; 代码设计&#xff1a; 代码&#xff1a; private int count;private boolean[] check;public int countArrangement(int n) {check new boolean[n1];dfs(n,1);return count;} private void dfs(int n, int pos){…

【C++图论 拓扑排序】2392. 给定条件下构造矩阵|1960

本文涉及知识点 C图论 拓扑排序 LeetCode2392. 给定条件下构造矩阵 给你一个 正 整数 k &#xff0c;同时给你&#xff1a; 一个大小为 n 的二维整数数组 rowConditions &#xff0c;其中 rowConditions[i] [abovei, belowi] 和 一个大小为 m 的二维整数数组 colConditions…

Anaconda安装(2024最新版)

安装新的anaconda需要卸载干净上一个版本的anaconda&#xff0c;不然可能会在新版本安装过程或者后续使用过程中出错&#xff0c;完全卸载干净anaconda的方法&#xff0c;可以参考我的博客&#xff01; 第一步&#xff1a;下载anaconda安装包 官网&#xff1a;Anaconda | The O…

SSE部署后无法连接问题解决

1. 问题现象 通过域名访问 https://api-uat.sfxs.com/sse/subscribe?tokenBearer%20eyJUxMiJ9.eyJhY2NvdW50IjoiYWRtaWZ0NvZGUiOiIwMDEiLCJyb2xidXNlcm5hbWUiOiLotoXnuqfnrqHnkIblkZgifQ.tlz9N61Y4 一直无法正常连接 2. 问题解决 nginx.conf进行配置 server {location /ss…

【优选算法篇】:分而治之--揭秘分治算法的魅力与实战应用

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;优选算法篇–CSDN博客 文章目录 一.什么是分治算法1.分治算法的基本概念2.分治算法的三个步…

Unreal Engine 5 C++ Advanced Action RPG 八章笔记

第八章 Boss Enemy 2-Set Up Boss Character 创建Boss敌人流程 起始的数据UI战斗能力行为树 这集新建Boss敌人的蓝图与动画蓝图和混合空间,看看就行巨人在关卡中,它的影子被打破,更改当前项目中的使用的阴影贴图就可以解决 从虚拟阴影贴图更改为阴影贴图即可 3-Giant Start…

C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序

1 欧拉路径 欧拉路径是图中每一条边只访问一次的路径。欧拉回路是在同一顶点上开始和结束的欧拉路径。 这里展示一种输出欧拉路径或回路的算法。 以下是Fleury用于打印欧拉轨迹或循环的算法&#xff08;源&#xff09;。 1、确保图形有0个或2个奇数顶点。2、如果有0个奇数顶…

day08_Kafka

文章目录 day08_Kafka课程笔记一、今日课程内容一、消息队列&#xff08;了解&#xff09;**为什么消息队列就像是“数据的快递员”&#xff1f;****实际意义**1、产生背景2、消息队列介绍2.1 常见的消息队列产品2.2 应用场景2.3 消息队列中两种消息模型 二、Kafka的基本介绍1、…

Vue3组件设计模式:高可复用性组件开发实战

Vue3组件设计模式:高可复用性组件开发实战 一、前言 在Vue3中&#xff0c;组件设计和开发是非常重要的&#xff0c;它直接影响到应用的可维护性和可复用性。本文将介绍如何利用Vue3组件设计模式来开发高可复用性的组件&#xff0c;让你的组件更加灵活和易于维护。 二、单一职责…