写在前面的话

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

从本节开始我们主要谈谈作为一个运维,在处理 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. 将Excel表结构导入到Powerdesigner

    我们经常会在excel中设计整理表结构,整理完需要导入到Powerdesigner中,可以通过以下脚本来实现快速,具体操作方法: 打开PowerDesigner,新建模型,点击Tools|Execut ...

  2. docker面试题和解答(一)

    什么Docker Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行. Docker与虚拟机有何不同 Docker不是虚拟化方法 ...

  3. ubuntu 默认python版本切换

    电脑上面有些脚本是python2的,有些是python3的,但是系统默认是python2,需要设置环境变量来进行切换. python2切换到python3: echo alias python=pyt ...

  4. 呵呵,asp.net 屁东西我都会忘记

    ASP.NET中的好些基本的东西有的忘了,有的需要学,从现在开始,给自己开一个基本的常用知识点的总结,一是学习,二是备忘. 今天算是第一篇吧! DropDownList在从数据库中得到数据源绑定后,计 ...

  5. Blazor入坑指南

    一 为什么用Blazor 原本就是后端程序员, 技术栈基于C#, 懂一点前端jQuery/Html 不管是webAssembly还是ServerSide, 就是想方便地做单页应用, 能wasm自然更好 ...

  6. Python迭代器(函数名的应用,新版格式化输出)

    1. 函数名的运用 ​ 你们说一下,按照你们的理解,函数名是什么? ​ 函数名的定义和变量的定义几乎一致,在变量的角度,函数名其实就是一个变量,具有变量的功能:可以赋值:但是作为函数名他也有特殊的功能 ...

  7. maven仓库之第一篇

    maven jar仓库 :存放maven项目使用的jar包. 中央仓库,存放99%免费开源项目jar包,apache公司负责维护的,以T为单位的存储. 例如 : struts2-core-2.3.24 ...

  8. URL.createObjectURL()的使用方法

    URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL.这个 URL 的生命周期和创建它的窗口中的 document 绑定.这个新 ...

  9. ORACLE关于日志文件基本操作

    1.查询系统使用的是哪一组日志文件:SELECT * FROM V$LOG; 2.查询正在使用的组所对应的日志文件:SELECT * FROM V$LOGFILE; 3.强制日志切换:ALTER SY ...

  10. android binder 进程间通信机制4-Service Manager

    Service Manager 是Binder进程间通信的核心组件之一: 它扮演者Binder进程间通信上下文(Context Manager)的角色 负责管理系统中的Service组件 向Clien ...