写在前面的话

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

从本节开始我们主要谈谈作为一个运维,在处理 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. fiddler抓包的一些基本知识整理

    fiddler常用命令:selelct xx: 高亮显示所有的text,js,image等响应类型?xxx:匹配所有url.protocol.host中包含xxx的会话=404:选择响应状态码为404 ...

  2. flash的几种模式Normal Mode、DUAL Mode、Quad Mode的概念和区别

    概念 1. 标准SPI 标准SPI通常就称SPI,它是一种串行外设接口规范,有4根引脚信号:clk , cs, mosi, miso 2. Dual SPI 它只是针对SPI Flash而言,不是针对 ...

  3. 【OCR技术系列之四】基于深度学习的文字识别

    上一篇提到文字数据集的合成,现在我们手头上已经得到了3755个汉字(一级字库)的印刷体图像数据集,我们可以利用它们进行接下来的3755个汉字的识别系统的搭建.用深度学习做文字识别,用的网络当然是CNN ...

  4. 第一个月.day1

    1. 编辑器下载 推荐的是hbulider     开发环境 2. 浏览器 推荐chrome 谷歌浏览器学习 3. 建立技术笔记 推荐博客园 Web 本月任务 搭建静态网页. 静态页面:不需要网络请求 ...

  5. CH-0304 IncDec Sequence

    0304 IncDec Sequence 0x00「基本算法」例题 描述 给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,…,a_n},每次可以选择一个区间 [l,r],使下标在这个区 ...

  6. tensorflow convert_variables_to_constants

    在使用tf.train.Saver函数保存模型文件的时候,是保存所有的参数信息,而有些时候我们并不需要所有的参数信息.我们只需要知道神经网络的输入层经过前向传播计算得到输出层即可,所以在保存的时候,我 ...

  7. Python 词云可视化

    最近看到不少公众号都有一些词云图,于是想学习一下使用Python生成可视化的词云,上B站搜索教程的时候,发现了一位UP讲的很不错,UP也给出了GitHub上的源码,是一个很不错的教程,这篇博客主要就是 ...

  8. 【spring-boot 源码解析】spring-boot 依赖管理梳理图

    在文章 [spring-boot 源码解析]spring-boot 依赖管理 中,我梳理了 spring-boot-build.spring-boot-parent.spring-boot-depen ...

  9. dataTable 表插入新行

    DataRow dr = dt.NewRow();//定义新行            dr["sumPrice"] = sumPrice;//对应字段赋值            d ...

  10. HTML中的三元表达式,灵活的使用or逻辑判断

    08.27自我总结 HTML中的三元表达式 判断内容 ? 满足返回的值 : 不满足返回的值 灵活使用or逻辑判断 比如我们某个变量为空的时候返回他另外个值 var a = msg || '没有消息'