Redis高可用之持久化,以及reids的性能管理

ops/2024/10/18 18:25:46/

一、redis高可用:

在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9%

redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性

redis中实现高可用的技术:持久化,主从复制,哨兵模式(处在主从复制的基础之上),reids集群。

持久化:持久化是最简单的高可用方法,主要作用是数据实现备份,也就是把redis缓存在内存中的数据保存到本地的硬盘中(冷备份)

二、redis持久化的两种方式:

  1. RDB持久化redis在内存中的数据定时保存到磁盘。(自动执行,手动执行)

  2. AOF持久化:redis的操作日志,以追加的方式写入一个AOF的文件,类似于MySQL的binlog

三、RDB持久化:

1.指在指定的时间间隔内,将内存中当前进程中的数据生成快照,保存到硬盘(快照持久化),用二进制压缩存储,保存的文件名的后缀是.rdb。只要redis启动时,可以直接读取快照文件,实现数据恢复 。

vim /etc/redis/6379.conf

 2.生产中禁止用save保存,都用bgsave,一旦执行了save,redis的主进程会进入阻塞状态,读写都将不能进行。

3.bgsave:就是rdb快照保存的方式。特点是在执行关闭redis服务的时候,也会自动执行bgsave。

4.bgsave是主从复制的默认恢复模式 从节点执行全量恢复操作。主节点通过bgsave命令把rdb发送给从节点,除了配置文件 save mn 关闭redis会执行bgsave,开启redis也会执行bgsave。

4.RDB工作方式:

fork子进程,子进程创建RBD文件

特点:主进程会通过fork机制来创建一个子进程,子进程的创建过程中,主进程会阻塞,子进程创建完毕之后,主进程会解除阻塞。由子进程来创建RDB文件。创建完成之后,通知主进程更新通知信息

 5.bgsave恢复过程

四、AOF持久化:

1.AOF持久化是将redis的每一次读、写、删除命令记录到一个单独的以.aof结尾的文件(查询操作不记录,查询操作是由主进程记录),当redis重启时,再次执行AOF文件中的命令来恢复数据。AOF的实时性更好,也是主流的持久化方案。

2.AOF默认是关闭的

3.RDB是redis的默认持久化文件,但是一旦开启AOF持久化,那么redis会以AOF的持久化文件作为最高优先级

五、AOF重写:一旦开启AOF持久化之后,所有的数据库操作记录必然都会写入AOF持久化文件当中。AOF优先级高于RDB。

vim /etc/redis/6379.conf         AOF生成的文件默认是关闭的需要在配置文件当中手动开启

1.随着时间的增长,AOF文件中的户数也会不断增加。AOF的文件也会越来越大。过大的AOF文件不仅仅会影响服务器的正常运行,也会导致数据恢复的时间过长。
2.文件重写是指定期的重写AOF文件,目的是减小AOF文件的体积。AOF重写是把redis进程内的数据转化为写的命令,同步到新的AOF文件当中(不会额外的生成新的文件,只是在原内容中进行压缩)。不会对原有的AOF文件进行任何读、写操作
3.文件重写虽然是AOF持久化强烈推荐的,但不是必须的。没有重写并不影响redis启动时的读取数据。在实际工作中,会关闭自动的文件重写。通过定时任务来完成。

4.AOF的实现过程

六、RDB和AOF之间的优缺点:

RDB的优点:文件体积小,网络传输速度很快,适合全量复制。恢复速度也比AOF要快

缺点:做不到实时的持久化,数据如此重要,不能够容忍丢失的。另外RDB需要满足特定的格式,兼容性很差。

老版本的RDB不支持新版本。(redis版本一定要一致)5.0.7

AOF的优点:秒级持久化。兼容性好。因为是文本格式保存的命令,命令是通用的,适合数据迁移。

缺点:文件大,恢复速度慢。AOF持久化需要频繁的向磁盘写入数据,磁盘的IO压力也是很大的。对redis主进程的性能也会有一定的影响。

七、reids的性能管理

1.查看当前占用系统多少

used_memory:853688 redis中数据占用的内存

used_memory_rss:10522624 redis向操作系统申请的内存

used_memory_peak:853688 redis使用内存的峰值

2.在文本中如何设置redis占用系统的阈值 vim /etc/redis/6379.conf

3.内存碎片率=redis向系统申请的内存/redis数据实际占用的内存

used_memory_rss/used_memory=内存碎片率

系统已经分配给了redis,但是redis未能够有效利用的内存

allocator_frag_ratio:1.33

分配器碎片的比例,redis的主进程调度时产生的内存。比例要越小越好,值越高说明内存的浪费越多。

allocator_rss_ratio:6.79

分配器占用物理内存的比例,告诉你主进程调度执行时占用了多少物理内存。

rss_overhead_ratio:0.93

RSS是向系统申请的内存空间,redis占用物理空间额外的开销比例,比例要越低越好,表示redis实际占用的内存和向系统申请的内存越接近,额外的开销越低。

mem_fragmentation_ratio:12.18

内存碎片的比例,越低越好,内存的使用率越高。

4.手动清理碎片的两种方法:

八、缓存击穿(面试题)

1.什么是击穿:redis缓存数据有一部分丢失,导致请求转发到了数据库,或者说是缓存刚过期,新缓存没有建立,请求都发送到了数据库

2.怎么处理击穿:热点缓存数据设置为永不过期;做持久化,高可用方案。

3.当面试官问及击穿时的回答

九、缓存雪崩

1.什么是雪崩:redis产生大面积故障(缓存数据丢失),所有的请求全部转发到了数据库数据库不适合高并发,很快集群就会崩溃,然后整个系统瘫痪。

2.发生雪崩的原因:人为

                            缓存数据大量的同时过期,新的缓存没有及时生成

                            redis服务集群崩溃

                            访问量过大,超过redis本身的负载能力

3.怎么防备雪崩发生:redis集群一定要做高可用方案

                                   熔断机制,hystrix可以实现熔断,降级,限流来降低雪崩的概率

  十、缓存穿透

原因:80%以上是黑客攻击。

利用缓存数据库里面都没有的数据,用户一直在发起请求。

利用大量的请求压垮数据库,从而导致整个网站崩溃。

处理:防火墙

           验证拦截,需要手动完成,可以判断是否是攻击行为

           缓存空的数据,把一些空数据,也设置缓存,声明周期短一些。


http://www.ppmy.cn/ops/89466.html

相关文章

hash表如何形成,hash函数如何计算,什么是hash冲突 如何解决 ,Golang map的底层原理及扩容机制

散列表 散列表(hash表):根据给定的关键字来计算出关键字在表中的地址的数据结构。也就是说,散列表建立了关键字和 存储地址之间的一种直接映射关系。 问题:如何建立映射管血 散列函数:一个把查找表中的关键字映射成该关键字对应…

【课程总结】day19(上):大模型简介

前言 终于,我们的课程将要进入到当前最为火热的大模型部分。本章内容,我们将开始了解大模型,其中的内容包含大模型的发展历史、大模型的特点、大模型底层架构Transformer的简单了解以及最后对于人工智能的思考。 人工发展历史 早期探索阶段…

全面解锁:通过JSP和Ajax实现钉钉签到数据展示及部门筛选功能

要在JSP页面中调用钉钉的签到接口,并将签到数据展示在页面上,同时提供部门筛选功能,你可以按照以下步骤操作: 准备钉钉API: 你需要首先获取钉钉开放平台的API凭证(如access_token)。请参考钉钉开…

whisper+whisperx ASR加对齐

忘了怎么安装了,这里记录一下整理出来的类,不过这个识别容易出现幻觉,对齐也不是很准,比如说使用 large-v3 倒是能有一定的分句作用,但是每句最后一个字给的时间太短,这也表明了对齐不准。 from chj.comm.…

Git(4) 解决Git相关问题的实用技巧

本文将介绍一些Git实用的技巧,实际操作中解决常见的Git问题。 问题1:将本地项目推送到远程仓库 如何将本地项目推送到远程仓库,包括处理常见错误的方法,并最终将代码推送到 main 分支。 步骤 1. 初始化本地仓库 确保已经在本地…

分享一个基于人脸识别的小区物业管理系统Spring Boot(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

安卓基本布局(下)

TableLayout 常用属性描述collapseColumns设置需要被隐藏的列的列号。shrinkColumns设置允许被伸缩的列的列号。stretchColumns设置允许被拉伸的列的列号。 <TableLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/TableL…

【学习笔记】Day 3

一、进度概述 1、作业1 2、组会会议纪要——没太听懂&#xff0c;得再看 二、详情 1、作业1 &#xff08;1&#xff09;在python中&#xff0c;想要使output为图片&#xff0c;需要用的matplotlib库&#xff0c;这里做简单的整理&#xff0c;以便更好的理解代码。 …