2、redis的持久化

redis的持久化

在redis当中,高可用的技术包括持久化,主从复制,哨兵模式,集群。

1、持久化是最简单的高可用的方法,作用就是备份数据,即将数据保存到硬盘,防止进程退出导致的数据丢失。

redis的持久化方式:

1、RDB持久化---------->人工或者是定时的把内存当中的数据保存到磁盘,这是一种冷备份的方式。(备份的时候不用关闭服务,恢复的时候需要关闭),默认的持久化方式。

2、AOF持久化---------->类似于mysql的二进制日志,把所有redis的操作记录在二进制日志当中,恢复的时候从二进制日志的内容进行恢复。全热备份。服务需要重启。

AOF的持久化的实时性更好,进程意外丢失,恢复的数据是最多的,AOF是主流的持久化方式。

RDB持久化:

快照持久化,文件的后缀名是.rdb,redis每次重启时都会读取rdb文件进行恢复。

save和bgsave

save:可以在配置文件声明,也可以手动声明

bgsave:向主进程发送一个信号,主进程fork(后台)新建一个子进程,在fork的过程中,主进程阻塞,创建完子进程之后,阻塞接触,子进程来创建rdb文件。

vim /etc/redis/redis.conf

AOF持久化

vim /etc/redis/redis.conf

开启AOF日志

一旦开启AOF持久化,redis会默认选择AOF作为持久化方式,并且立刻读取二进制文件。

开启AOF一定要在初始化时开启

AOF日志可以恢复数据 二进制日志文件 vim appendonly.aof

aof-load-truncated yes

当发现aof文件被截断时,如果是yes,redis在重启时发现被截断,redis会尽可能的恢复数据,继续运行。 如果是no,如果发AOF被截断,redis会拒绝启动

截断:写入的过程中出现异常,内存当中有,但是没有完整的写入到磁盘。

9:10-9.20

9:15-9.18

AOF的rewrite机制:重写

重写表示的是压缩,当二进制文件内容越来越多,文件越来越大,于是就有了重写的功能,对二进制文件进行压缩

bgrewriteaof进程来进行处理

redis-cli bgrewriteaof

1、如果涉及到数据迁移,rewrite只支持向上兼容(redis5---->redis5.1)

A---aof---B

rdb和aof之间的优缺点:

1、RDB的文件体积比aof小,适量全量备份,速度也比AOF快

1、rdb不能实时持久化,数据如此重要,不能够丢失

3、RDB的兼容性比AOF要差。新老版本之间不能兼容

生产中:redis的一定要一致,目前最稳定的版本5.0.7

AOF的优点,实时持久化的策略,兼容性也好,文本格式保存的命令

缺点:文件比较大,恢复速度比较慢,对磁盘的I/O性能也比较高。

redis的性能管理:

1、查看redis内存使用情况:

used_memory:919200 redis数据占据的内存

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

used_memory_peak:981312 redis使用系统内存的峰值

allocator_frag_ratio:1.27

分配器的碎片比例,分配器的碎片越多,浪费的内存越多,这个值越小越好

allocator_rss_ratio:2.63

分配器使用多少系统的内存

rss_overhead_ratio:2.71

RSS的开销比例,占用系统的物理内存的额外开销,这个值越低越好,越接近0,redis的实际的使用比就越高。

mem_fragmentation_ratio:13.15

内存的碎片比例,内存碎片,系统分配之后,但是不能被利用的内存。越低,内存的利用率越高

配置redis的初始化,必须给redis的内存设置阈值,不设置阈值,只要有需要,redis会占满整个内存,而且会继续占用交换分区的空间

设置阈值后,不会使用交换分区了,到达阈值,系统会自动回收生命周期不足的key。

回收机制

volatile-lru: 根据算法lru,从过期时间的数据集合当中淘汰键值,主要是针对设置了ttl是键值对

volatile-ttl: 根据算法,淘汰即将过期的数据(也是针对设置生命周期的数据)

一直删除到小于或者等于内存阈值,才不会继续删除。

redis的雪崩,和redis的击穿,redis的穿透

缓存雪崩:整个作为数据库的键值对,全部失效,redis没有办法处理缓存,所有的请求全部集中到数据库上,数据库很快就崩溃。

1、redis集群大面积故障

2、所有的缓存键值对全部被删除(作为数据库缓存的键值对是不会设置生命周期的)

3、大量的redis请求失败,所有的请求直接到了数据库

缓存击穿:热点数据的缓存失效,大量的热点请求全部转发到了数据库,会导致数据库的性能大幅下降。

热点数据设置成永不过期。

1、我通过mysql的慢查询日志,发现了sql执行的速度突然大幅下降

2、查询redis,发现的缓存的键值对消失了

3、我没有redis的密码,专门负责数据库的人处理。

redis的缓存穿透:

缓存的键值对和数据库当中都没有数据,但是依然有客户端不对在请求,黑客在利用漏洞,把大量请求绕过redis,去压垮数据库。

相关推荐
小光学长7 分钟前
基于vue框架的东莞市二手相机交易管理系统5yz0u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
Freedom℡17 分钟前
Spark,SparkSQL操作Mysql, 创建数据库和表
数据库·spark
羊羊羊i43 分钟前
Redis进阶知识
数据库·redis·缓存
枷锁—sha1 小时前
SQL注入——Sqlmap工具使用
数据库·sql·安全·web安全
进击的CJR2 小时前
MySQL 8.0 OCP 英文题库解析(五)
数据库·mysql·开闭原则
观无5 小时前
数据库DDL
数据库·oracle
消失在人海中5 小时前
Oracle 内存优化
数据库·oracle
昭阳~6 小时前
MySQL读写分离
数据库·mysql
jjkkzzzz8 小时前
Linux下的c/c++开发之操作Redis数据库
数据库·c++·redis
老华带你飞9 小时前
实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
java·数据库·spring boot·小程序·论文·毕设·实习记录小程序