redis高持久化、RDB、AOF

news2024/12/24 19:46:13

redis高可用

redis当中,高可用概念会更宽泛一些。
除了正常服务以外,数据量的扩容,数据安全。

实现高可用的方式:
1、持久化 最简单的高可用方法 主要功能:备份数据
把内存的数据保存到硬盘当中。

2、主从复制

3、哨兵模式 建立在主从复制的基础上,部署哨兵模式。

4、redis集群

redis的持久化

内存当中的数据保存到硬盘中。
开启持久化之后,会有持久化文件,通过文件进行恢复。
redis提供的持久化方式:

RDB持久化:

定时的将内存当中的数据保存到硬盘,类似于快照的形式用二进制压缩存储。后缀名为 .rdb
每次redis重启时,都会读取快照文件,进行恢复。默认的持久化方式。

 219 save 900 1
 220 # 当时间到900秒,如果redis的数据发生一次变化,就会执行bgsave
 221 save 300 10
 222 #当时间到达300秒之内,如果redis的数据发生十次变化,就会执行bgsave
 223 save 60 10000
 224 #当时间到60,如果redis的数据发生了10000次变化,就会执行bgsave
#save n m 只能配置文件当中的配置项,redis执行命令bgsave

save不能直接在命令行执行,一旦执行save,redis的主进程就会进入阻塞状态,读写都不能进行,直到save完成才能读写。save在生产中禁用。
bgsave 就是RDB快照保存的方式
bgsave 在执行关闭redis服务的时候,也会自动执行bgsave
bgsave是主从复制的默认恢复模式,从节点执行全量恢复操作。主节点通过bgsave命令把rdb发送给从节点
除了配置文件的save m n 关闭redis会执行bgsave,开启redis也会执行bgsave文件**(cd /var/lib/redis/6379 dump.rdb)**
在这里插入图片描述

AOF持久化:

AOF持久化:把操作的数据库执行以日志的形式保存到指定的文件当中,文件后缀名为 .aof。类似于MySQL的(binlog)

AOF持久化的实时性更好,只要是操作了就会记录在日志文件中,进程出现意外,丢失的数据更少,AOF是主流的持久化方式

AOF是主流,RDB和AOF配合使用

AOF默认关闭,需要开启。如果同时开启RDB和AOF,哪个优先级高?
一旦开启AOF,系统默认选择AOF进行恢复。

[root@myslq4 ~]# vim /etc/redis/6379.conf 
 571  maxmemory  2gb        一定要设置
 572 #设置redis占用系统的阀值
 704 appendonly yes   默认关闭,yes开启
 734 appendfsync everysec
 735 #每秒自动更新一次
 757 no-appendfsync-on-rewrite no
 758 #不是每次都一定要对AOF文件进行重写,手动来对AOF文件进行重写
 801 aof-load-truncated yes
 802 #如果发现AOF文件被截断,redis在启动时自动修复AOF的文件,尽可能对数据进行恢复
 803 #一旦变成no redis发现文件截断,redis会拒绝启动

在这里插入图片描述

重写:
充分非必要条件
一旦开启AOF持久化之后,所有的数据库操作记录,必然都会写入AOF持久化文件当中。
AOF文件越来越大。
aof文件越大,记录的操作越多,一旦要回复,速度会很慢。
重写就是为了压缩AOF持久化文件。大大减小
重写就是把源内容压缩,后续新的读写,继续插入aof文件,

192.168.11.144:6379> BGREWRITEAOF

RDB持久化 与 AOF持久化之间的优缺点:
RDB:文件小,传输速度快,主从复制的默认模式,适合全量复制,恢复速度比AOF快、性能影响较小
AOF优点:秒级的持久化,数据量全,而且兼容性好,通用
缺点:文件大,恢复速度慢,性能影响大,
但是AOF,支持全量和增量。数据安全大于一切。

redis性能管理

1、

192.168.11.144:6379> info memory
used_memory:874480 字节   #redis中的数据占用内存的大小
used_memory_rss:12832768   #redis向系统申请的内存。随着数据的大小自动扩容
used_memory_peak_human:894.88K  #占用系统内存的峰值

2、内存碎片化率
内存碎片化率=redis向系统申请的内存/redis数据实际占用的内存 越接近1越好

[root@myslq4 ~]# redis-cli info memory | grep ratio   #查看碎片化利用率
allocator_frag_ratio:1.26         #分配器的碎片化比例,值越大碎片越多,导致内存浪费
allocator_rss_ratio:6.47          #分配器占用物理内存的比例
rss_overhead_ratio:1.22           #占用物理内存的额外的开销的比例   越小越好
mem_fragmentation_ratio:15.42     #内存的碎片比例Redis进程占据操作系统的内存与Redis分配器分配的内存总量之间的比值,值越低                                    越好 
[root@myslq4 ~]# redis-cli  memory purge   #手动清理
[root@myslq4 ~]# vim /etc/redis/6379.conf
1360  activedefrag yes
1361 #自动清理碎片
1362 # Minimum amount of fragmentation waste to start active defrag
1363  active-defrag-ignore-bytes 100mb
1364 
1365 # Minimum percentage of fragmentation to start active defrag
1366  active-defrag-threshold-lower 10
1367 
1368 # Maximum percentage of fragmentation at which we use maximum effort
1369  active-defrag-threshold-upper 100
1370 
1371 # Minimal effort for defrag in CPU percentage
1372  active-defrag-cycle-min 5
1373 
1374 # Maximal effort for defrag in CPU percentage
1375  active-defrag-cycle-max 75

面试:redis常见的问题:

缓存击穿:

1、缓存雪崩:

redis 产生了大面积的故障(缓存数据丢失)所有的请求全部转发到数据库。
数据库不适合高并发,很快集群就会崩溃,然后整个系统瘫痪。
1、人为
2、缓存数据大量的同时过期,新的缓存没有及时生成
3、redis服务集群崩溃
怎么防备缓存雪崩:
1、redis必须高可用方案
持久化、主从、哨兵、集群
2、访问量过大,超过redis本身的负载能力
熔断机制:Hystrix可以实现熔断,降级,限流,降低雪崩的概率

2、缓存击穿:

redis的缓存数据一部分丢失,导致请求转发到了数据库。
或者缓存刚刚过期,新缓存没有建立,请求都转发到数据库

防范机制

热点缓存数据设置为永不过期
持久化,高可用

我发现经常使用的热点语句,忽然就变的很慢,之后持续的变慢,查找问题,发现该热点数据对应的缓存键值对消失。
**解决办法:**因为没有redis密码,报告给了数据库的部门。
我进入了redis的数据库 set 重新创建了这个热点数据的缓存,解决了这个问题。

3、缓存穿透:

80%黑客在攻击。
利用缓存和数据库都没有的数据,用户一直在发起请求。
利用大量的请求压垮数据库,从而导致整个网站崩溃。

防御手段

防火墙 只能起到一定的作用
验证拦截(消息队列)需要手动完成,可以判断是否攻击行为。
缓存空数据
新创建了这个热点数据的缓存,解决了这个问题。

3、缓存穿透:

80%黑客在攻击。
利用缓存和数据库都没有的数据,用户一直在发起请求。
利用大量的请求压垮数据库,从而导致整个网站崩溃。

防御手段

防火墙 只能起到一定的作用
验证拦截(消息队列)需要手动完成,可以判断是否攻击行为。
缓存空数据
把一些空数据,也设置缓存,声明周期短一些

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

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

相关文章

【CAN通讯系列8】如何准确接收数据?

在 【CAN通讯系列7】波特率是什么?已经介绍了CAN位时间和采样点等概念,每1位由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)四个段组成,这个也成为位时序,采样点位置处于PBS1和PBS2的交界处,如…

开源跨平台SQL编辑器:Beekeeper Studio

Beekeeper Studio: 简化SQL体验,提升数据库效率。- 精选真开源,释放新价值。 概览 Beekeeper Studio,一款为现代数据库管理而生的跨平台SQL客户端,以其简洁直观的界面和强大的功能,赢得了开发者和数据库管…

betterzip免费版 betterzip破解版 betterzip注册码密钥 betterzip解压缩软件下载安装教程

基于Mac开发的解压缩软件就那么几款,BetterZip解压缩软件估计是Mac上非常受欢迎的压缩工具。苹果Mac电脑上虽然有自带的归档实用工具,但是功能过于单一,对很多格式的压缩文件无能为力,特别像使用Windows电脑的朋友压缩文件习惯使用…

搜索型和XX型注入

"Pikachu"通常是指一个安全漏洞学习平台,它模拟了各种Web应用中的安全漏洞,以便于学习者实践和了解这些漏洞的工作原理。在这个平台上,你可以找到不同类型的SQL注入漏洞来练习和学习如何利用与防御它们。 搜索型注入(也…

同步交互与异步交互:深入解析与选择

同步交互与异步交互:深入解析与选择 1、同步交互2、异步交互3、选择策略 💖The Begin💖点点关注,收藏不迷路💖 在软件开发的世界里,交互方式主要分为两大类:同步与异步。下面是对这两种方式的解…

AGI思考探究过程中的意义、价值与乐趣Ⅲ

「融合RL与LLM思想,探寻世界模型以迈向AGI」这篇文章也探究了思维系统的两种推理模式:系统Ⅰ(快思考)和系统Ⅱ(慢思考)在推理过程的本质普遍性及表象差异性,以及尝试挖掘快慢思考是否与两类学习…

用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪

Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving 论文 摘要: 我们提出了一种基于立体视觉的方法,用于在动态自动驾驶场景中跟踪相机自我运动和 3D 语义对象。我们建议使用易于标记的 2D 检测和离散视点分类以及…

【SQL Server】网络通信基础

目录 网络通信基础 网络协议概述 TCP/IP 协议栈 端口和地址绑定 网络通信基础 网络协议概述 网络协议是一组规则和标准,定义了数据在网络中的传输方式。这些协议确保不同设备之间的通信顺畅且高效。网络协议分为多个层次,每个层次负责特定的任务。…

直播狂欢下的隐忧|专题报告集

原文链接:https://tecdat.cn/?p37200 从草根逆袭的烤摊主郭有才,仅用9天便突破千万粉丝,日入惊人的380万,到菏泽因直播热潮连夜紧急修路,这一切看似光鲜的背后,实则暗流涌动。 模仿“反诈老陈”、“保安…

Yearning-MYSQL 审计平台部署

目录 一. 环境准备 二. 部署安装 三. 基础使用 1.用户管理 2. 创建SQL审计流程 3. 自定义审核规则 4. 导入数据源 5. 创建权限组 6. 登录用户申请工单 1. 创建一个DDL工单提交 2. SQL审核执行 3. SQL执行 4. 数据验证 Yearning 是一个开源的 MySQL SQL 审计平台…

CTFHUB-文件上传-文件头检查

开启题目 1.php内容&#xff1a; <?php eval($_POST[cmd]);?> 截屏截一个很小很小的图片&#xff0c;保存为 png 格式&#xff0c;把 1.png 和 1.php 放在同一文件夹&#xff0c;在此目录打开 cmd&#xff0c; 使用以下命令把 1.png 和 1.php 合成为图片马 copy 1.pn…

内存池化技术详解:提升C++程序性能的关键

目录 一. 引言 内存池化技术的概念与重要性 内存池化在现代C开发中的应用 二. 内存池化的基本原理 内存池化的工作机制 常见的内存池实现策略 三. 最新的内存池化技术 C23标准中的新特性 第三方库的最新进展 jemalloc和tcmalloc的使用和改进 四. 内存池化在多线程环…

ThreadLocal:线程本地变量的作用与应用

ThreadLocal&#xff1a;线程本地变量的作用与应用 1、简介2、作用3、应用场景4、注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、简介 ThreadLocal 是Java中一个强大的工具类&#xff0c;用于创建线程局部变量。它为每个使用该…

Python教程(十):面向对象编程(OOP)

目录 专栏列表前言一、面向对象编程概述1.1 类和对象1.2 继承1.3 多态1.4 封装 二、Python 中的类和对象2.1 定义类2.2 __init__ 函数解释2.3 创建对象 三、继承3.1 基本继承3.2 创建子类对象 四、多态五、封装六. 访问限制七、综合实例结语 专栏列表 Python教程&#xff08;一…

MySQL~SQL语法

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。 SQL 在标识符&#xff08;如表名、列名、函数名等&#xff09;的处理上通常是不区分大小写的&#xff0c;这…

如何手写一个SpringBoot框架

你好&#xff0c;我是柳岸花开。 在这篇文章中&#xff0c;我们将手写模拟SpringBoot的核心流程&#xff0c;让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程&#xff0c;包含两个模块&#xff1a; springboot模块&#xff0c;表示Spring…

Redis 有关列表的命令

List 也叫列表&#xff0c;一般用来操作和存储一组有顺序的数据&#xff1b; 索引与数组类似&#xff0c;从 0 开始&#xff1b; 1. 从列表头部添加 LPUSH 2. 获取列表内容 LRANGE LRANGE 键名称 起始位置 结束位置 注意&#xff1a; LPUSH 命令将添加的元素依次添加到列…

IEEE1801 UPF 编写指南-1.MSV设计

多电源电压&#xff08;MSV&#xff09;设计为核心技术使用多个电源电压&#xff0c;如图1-1“MSV设计示例”所示。顶层设计和实例inst_A在电压VDD1下操作&#xff0c;而实例inst_B在电压VDD2下操作&#xff0c;实例inst_C在电压VDD3下操作。 在相同操作电压下运行&#xff08;…

Chapter 23 数据可视化——地图

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、基础绘图二、视觉映射三、案例分析 前言 随着地理信息系统&#xff08;GIS&#xff09;技术的迅猛发展和大数据时代的到来&#xff0c;数据可视化已经成为分析和理…

供应链下生产计划有什么新要求?详解供应链下生产计划编制步骤!

在当今全球化和市场快速变化的商业环境中&#xff0c;供应链管理下的生产计划比以往任何时候都更为关键。企业不仅要应对需求的波动和供应的不确定性&#xff0c;还要在激烈的市场竞争中保持敏捷和效率。有效的生产计划已成为制造业乃至整个供应链成功的核心。本文将深入探讨供…