写在前面的话

通过前两节,除了安装部分,其它的更多的是作为了解,除非我们面向实际的开发,当然知道更多总是好的,这样才有吹牛逼的资本。

从本节开始我们主要谈谈作为一个运维,在处理 Redis 的维护的时候应该注意哪些方面。

数据持久化

在说持久化之前我们需要了解,Redis 之所以快,原因在于它的数据默认存储在内存中,内存的读写速度相较于 MySQL 这类关系型数据库从硬盘读取肯定是快了不知道多少倍。但同时也存在一个问题,服务器宕机,服务挂掉都会使得内存中的数据丢失,如果只是 Session 类的数据还好,但真正用起 Redis 的肯定不只是存 Session 这么简单,这里面肯定会包含一部分不那么重要,但是又不能缺少的数据。

那如何保证该部分数据在服务器宕机或者服务挂掉的时候尽可能的保证数据不丢失,归根结底,还是需要将数据刷写到磁盘。所以便有了数据的持久化。

Redis 为我们提供了两种数据持久化的方法:RDB AOF

RDB

能在指定的时间间隔将数据刷写到磁盘,生成快照。

优点在于快,适合当做备份,主从复制就是基于 RDB 实现。缺点在于很难保证数据的完整性,在宕机和持久化之间可能会缺失一点数据。

配置方法,在 redis.conf 中加入如下配置:

# 快照保存名字
dbfilename dump-6379.rdb # 快照保存目录
dir "/data/services/redis/data" # 持久化规则,15分钟一次变化,5分钟10次变化。1分钟10000次变化都会触发持久化
save 900 1
save 300 10
save 60 10000 # 如果开启RDB快照,如果持久化失败,Redis就会拒绝所有写请求
stop-writes-on-bgsave-error yes # 对于快照是否进行压缩
rdbcompression yes

此时重启 Redis 然后可以手动持久化一次查看效果,否则只能等上面的规则触发持久化:

此时去 data 目录查看:

这就是快照,由于没啥数据,所以很小,所谓的备份,就是备份该文件。

AOF

对于 Redis 的持久化,我们可以参照 MySQL 的数据备份来做参考,RDB 就像我们写的定时任务定期去 mysqldump,而 AOF 则更像 bin log,你所做的每一步都会保存到持久化文件中,能够最大程度的保存服务器在宕机的时候数据完整性。

当然也有问题,那就是因为所有操作都记录,会导致该文件特别大,不过我们可以使用命令来精简它。

在服务器同时开启 RDB 持久化和 AOF 持久化,在恢复的时候默认优先选择 AOF,因为数据完整度更高。

配置方法,在 redis.conf 中加入如下配置:

# RDB持久化宕机可能丢失部分数据,AOF相当于MySQL binlog
appendonly yes # AOF持久化文件名称
appendfilename "appendonly-6379.aof" # 持久化策略always/no/always
appendfsync everysec # AOF重写或写入RDB时候会产生大量IO,此时AOF的fsync将阻塞很久,如果应用无法接受这种延迟则设置为yes,则rewrite期间不fsync
no-appendfsync-on-rewrite yes # 自动重写,当前AOF超过上一次重写时百分之多少触发重写
auto-aof-rewrite-percentage 100 # 最小达到多大才重写,避免很小的时候就重写
auto-aof-rewrite-min-size 64mb # AOF文件尾部可能不完整,redis启动时,数据载入。yes会自动修复,否则可能需要手动redis-check-aof
aof-load-truncated yes # 4.0 开始允许两种持久化混合
aof-use-rdb-preamble no

重启 Redis 之后执行 save 此时再度查看 data 目录:

可以看到生成了 AOF 持久化文件!

扩展:AOF 文件可能会损坏,但是可以使用 Redis 的工具来修复它。

修复原则:在修复之前,我们需要先将文件备份,避免修复失败数据永久性丢失!

redis-check-aof --fix appendonly-6379.aof

安全配置

持久化算是 Redis 的一种安全策略,另外一种安全策略就是绑定 IP 和设置密码:

# 保护模式,如果【yes】必须绑定IP或者设置密码
protected-mode yes # 绑定IP地址,多个使用空格隔开,全部可以使用0.0.0.0
bind 127.0.0.1 192.168.200.101 # 配置密码
requirepass helloworld

还有更复杂的安全策略,比如将一些关键的命令进行重命名,避免倍别人连接上去乱改。

当然我们一般不会这样做,对于数据库类的服务,在生产中我们一般选用不带有公网连接的配置,最大程度保持数据安全性。

Redis for OPS 03:数据安全与持久化的更多相关文章

  1. Redis高可用详解:持久化技术及方案选择

    文章摘自:https://www.cnblogs.com/kismetv/p/9137897.html 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关 ...

  2. Redis高可用详解:持久化技术及方案选择 (推荐)--转载自编程迷思博客www.cnblogs.com/kismetv/p/8654978.html

    一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常 ...

  3. Redis数据库高级实用特性:持久化机制

    Redis数据库高级实用特性:持久化机制 大型web系统数据缓存设计 Redis高级特性:虚拟内存的使用技巧 Redis高级实用特性:安全性与主从复制 Memcached.Redis OR Tair

  4. Redis的增删改查、持久化你会了吗

    原文:Redis的增删改查.持久化你会了吗 Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多线程 ...

  5. redis 实战操作RDB和AOF快照持久化

    前言:redis是我们常用的缓存方式,今天就来介绍下两种持久化的方式吧,先科普概念,再实战操作 一.RDB Redis将某一时刻的快照(备份的数据库数据)保存成一种称为RDB格式的文件中,这种格式是经 ...

  6. redis快照关闭了导致不能持久化的问题

    在使用redis的时候我们经常会遇到这种bug:   Python与Redis交互时,设置数据出现下列报错信息:   MISCONF Redis is configured to save RDB s ...

  7. redis学习笔记-03:redis安装

    一.redis的安装和配置 1.下载redis-5.0.4.tar.gz到/opt目录下,解压命令 :tar -zxvf redis-5.0.4.tar.gz,解压后出现redis-5.0.4的文件夹 ...

  8. Redis学习笔记(八)——持久化

    一.介绍 Redis的所有的数据都存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为"半持久化模式"):也可以把每一次数据变化都写入到一个append only file(a ...

  9. Redis基础篇(三)持久化:AOF日志

    Redis是内存数据库,但是一旦服务器宕机,内存中的数据将会全部丢失. 最简单的恢复方式是从后端数据库恢复,但这种方式有两个问题: 频繁访问数据库,会给数据库带来巨大的压力: 从数据库中读取相比从Re ...

随机推荐

  1. 【RTOS】基于V7开发板的RTX5和FreeRTOS带CMSIS-RTOS V2封装层的模板例程下载,AC6和AC5两个版本

    说明: 1.使用MDK的RTE环境开发RTX5和FreeRTOS,简单易移植,统一采用CMSIS-RTOS V2封装层. 2.DTCM是H7里面性能最高的RAM,主频400MHz,跟内核速度一样,所以 ...

  2. java中窗口的打开与关闭

    作为小白的我,今天学习了java中打开与关闭窗口的方法. 1.在java中创建一个窗口 import java.awt.*;import java.awt.event.*;public class L ...

  3. 浅谈Kotlin中的函数

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/UV23Uw_969oVhiOdo4ZKAw作者:连凌能 Kotlin,已经被Android官方 ...

  4. [问题排查]通过调度系统远程执行脚本,报mysql command not found异常

    今天在公司使用LS调度系统(百度内部的工具),执行远程脚本的时候,每次都失败. 脚本内容比较简单,其实就是将HDFS(AFS)中的数据插入到Palo(Doris)数据库中,脚本如下: mysql -h ...

  5. 将python项目打包为可运行的windows桌面exe程序

    ---恢复内容开始--- 步骤大概如下: 1.需要一个python文件/项目.也就是我们想要打包的文件 2.安装pyinstaller,目的是将我们的python文件生成为exe可执行程序. 3.使用 ...

  6. 【ASP.NET Core学习】入门

    下面操作都是基于VS Code,Net Core3.0 创建 Web 应用项目  VS Code终端输入 dotnet new webapp -o aspnetcoreapp 创建一个名称为aspne ...

  7. jQuery跳转到另一个页面以及原生js跳转到另一个页面

    1.原生js我们可以利用http的重定向来跳转 window.location.replace("https://www.cnblogs.com/pythonywy/"); 2.原 ...

  8. The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.

    介绍 再使用spring操作mysql数据库报错 @Test public void test() { try { //创建连接池,先使用spring框架内置的连接池 DriverManagerDat ...

  9. HTML 文件路径

    文件路径描述了网站文件夹结构中某个文件的位置. 文件路径会在链接外部文件时被用到: 网页 图像 样式表 JavaScript 绝对文件路径 绝对文件路径是指向一个因特网文件的完整 URL: 实例 &l ...

  10. 简单学习HTML

    最近突然就对静态页面很有兴趣,主要是看到几个比较酷炫的页面效果,也想自己做一下,但是我的前端页面就是菜鸡,还停留在html+css+jquery的简单使用上,而且还忘记得差不多了! 而且我感觉前端比后 ...