配置文件详解、RDB 及 AOF 备份机制(一)|学习笔记

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 快速学习配置文件详解、RDB 及 AOF 备份机制(一)

开发者学堂课程【Redis 入门实战演练: 配置文件详解、RDB 及 AOF 备份机制(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/653/detail/10834


配置文件详解、RDB 及 AOF 备份机制(一)


一、主要配置

1.save9001

save 900 1#在900秒内有一个键内容发生更改就出就快照机制 save 30010

# Save the DBon disk :#

save<seconds> <changes>

Changes 是指 key 的值,也就是发生的变化

Save   5   10

save   10  30

save   3   8

Redis 启动之后,会把配置文件解析,三个是或的关系,会解析成 save 5 10 pr save 10  30 or save 3  8 这样的关系,只要满足任何一个条件就会做快照。

900秒做一次 RDB,或者300秒有10次就做一次RDB,或者60秒之内10000次就会发生一次快照。

image.png

will save the DB if both the given number of seconds and the givennumber of write operations against the DB occurred.

Redis 的内存数据影响所用的秒数。比如给 Redis 配的内存是8个 G,现在已经写到6个 G 了,把6个 G 的数据写到磁盘上,需要关注磁盘的写入性有多高,通常情况下做 read5,read110等等,假如说写入性能是200兆,现在是6个 G,1秒写600兆,需要三十分钟才能写完。更多数据的话,用的时间会更长。通常情况下,三分钟或者五分钟一次就比较合适了。如果想让它更快一点,可以写成 save 1 1,1秒做一个快照。

2.save 60 10000

stop-writes-on-bgsave-error no #快照出错时是否禁止 redis 写入操作

rdbcompression yes #持久化到 RDB 文件时,是否压缩,"yes"为压缩,"no""则反之

压缩的话会降低文件的大小

rdbchecksum yes #是否开启 RC64校验,默认是开启

dbfilename dump.rdb #快照文件名

dir ./ #快照文件保存路径

快照保存在 /app/redis/data,因为这是自定义的目录。

[root@redis-server1 redis-4.0.14]# vim*/apps/redis/etc/redis.conf[root@redis-server1 redis-4.0.14]# systemctlrestart redis

[root@redis-server1 redis-4.0.14]# systemctlrestart redis

[root@redis-server1 redis-4.0.14]# vim /apps/redis/etc/redis.conf[root@redis-server1 redis-4.0.14j#

[root@redis-server1 redis-4.0.14]# systemctlrestart redis[root@redis-server1 redis-4.0.14]# systemctlrestart redis[root@redis-server1 redis-4.0.14]# systemctlrestart redis

[root@redis-server1 redis-4.0.14]# vim /apps/redis/etc/redis.conf[root@redis-server1 redis-4.0.14j# systemctlrestart redis

[root@redis-server1 redis-4.0.14]# vim /apps/redis/etc/redis.conf[root@redis-server1 redis-4.0.14]# systemctlrestart redis

按照如下脚本跑一下

import redisimporttime

pool = redis.ConnectionPool(host="172.31.7.101",prt=6379, db=49,password="")r = redis.Redis( connection_pool=pool)

for i in range ( 1000) :

r.set ( " k%d"% i, " v%d" % i)#time.sleep( 1)

data=r.get( " k%d" %i)print(data)

不管文件有多大,想要把文件往磁盘上保存,如果磁盘文件没有保存成功,这个文件假如说是6个G,磁盘此时是本地磁盘,把 RDB 放到 data 下面,把 RDB 文件保存到 /apps/redis/data。当磁盘空间满了,就会导致其保存不了,所以就会禁止写入 Redis。

当 rdb 快照出现错误时:

[root@redis-server1 redis-4.0.14]# ll /apps/redis/data/total 12

- rw-r--r-- 1 redis redis 10879 Feb7 23:57 dump_6379.rdb

[root@redis-server1 redis-4.0.14]# chmod root.root/apps/redis/data/ -Rchmod: invalid mode: ' root.root'

Try 'chmod --help' for more information .

[root@redis-server1 redis-4.0.14]# chownroot.root/apps/redis/data/ -R[root@redis-server1 redis-4.0.14j# vim /apps/redis/etc/redis.conf ^c

[root@redis-server1 redis-4.0.14]# tail -f /apps/redis/logs/redis_6379.log18355:M 07 Feb 23:57:44.197 * 5 changes in 3 seconds. Saving.. .

18355:M 07 Feb 23:57:44.197 *Background saving started by pid 1836018360:C 07 Feb 23:57:44.199* DB saved on disk

18360:C 07 Feb 23:57:44.200 * RDB: 0 MB of memory used by copy-on-write18355:M 07 Feb 23:57:44.298 * Background saving terminated with success18355:M 07 Feb 23:57:48.022* 5 changes in 3 seconds. Saving.. .

18355:M 07 Feb 23:57:48.022* Background saving started by pid 1836218362:C 07 Feb 23:57:48.025* DBsaved on disk

18362:C 07 Feb 23:57:48.025 * RDB: 0 NB of memory used by copy-on-write18355:M 07 Feb 23:57:48.123 * Background saving terminated with success

redis . except ions . ResponseError: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persis

t on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors durin

g writes if RDB snapshotting fails

(stop writes -on bgsave-error option). Please check the Redis Logs for details about th |

e RDB error.

Redis 服务器一直在保存,

[ root@redis-serverl ~]# 11 /apps/ redis/ data/

total 12

-rw-r--- 1 redis redis 10879 Feb 7 23:57 dump_ 6379. rdb

[ root@redis-server1 ~]# redis-c Li

127.0.0.1:6379> AUTH linux39

(error) ERR Client sent AUTH, but no password is set

127,0.0.1:6379>

127.0.0.1:6379>

127.0.0.1:6379>info

3. Keyspace

db49: keys-1000, expires=0, avg_ ttL=0

127.0.0.1:6379> SET key1 value1 [Ex seconds] [PX milliseconds] [NX|X]

会发现数据根本写不进去,无论是通过手动的方式插入数据,还是通过程序都写不进去。

如果内存足够,还是不能写进去数据的话,就把配置文件改成vim/apps/redis/etc/redis.conf。

Copy-on-write:写时复制

replica-serve-stale-data yes #当从库同主库失去连接或者复制正在进行,从机库有两种运行方式:

1)如果 replica-serve-stale-data 设置为 yes(默认设置),从库会继续响应客户端的读请求。2)如果 replica-serve-stale-data 设置为 no,除去指定的命令之外的任何请求都会返回一个错误 SYNC withmaster in progress".

Slaveof 是让当前的 Redis 作为哪台服务器的备份主机,如果没有密码,slaveof 172.31.4.1.6379.如果有密码的话需要打开 masterauth 设置密码。

包括它本身都可以去 slave 读,slave 会同步数据给 master,这时候设置为 yes,slave 仍然可以向客户端返还数据。

image.png

replica-read-only yes#是否设置从库只读

一般来说是设置为 yes,如果不这样可能导致存入 master 的数据存入 slave,会导致 master 和 slave 数据不一致,后面会读不出来。为了避免出现数据不一致的情况,所以设置为已读。

repl-diskless-sync no#是否使用 socket 方式复制数据(无盘同步),新 slave 连接连接时候需要做数据的全量同步,redis server 就要从内存 dump 出新的 RDB 文件,然后从 master 传到 slave,有两种方式把 RDB 文件传输给客户端;

1)基于硬盘(disk-backed) : master 创建一个新进程 dump RDB,RDB完成之后由父进程(即主进程)传给 slaves。

2)基于socket (diskless) : master 创建一个新进程直接 dump RDB 到 slave 的 socket,不经过主进程,不经过硬盘。

两个各有利弊,基于硬盘的话,RDB 文件创建后,一旦创建完毕,可以同时服务更多的 slave,但是基于 socket 的话,新 slave 连接到 master 之后得逐个同步数据。

在较慢并且网络较快的时候,可以用 diskless(yes),否则使用磁盘(no),磁盘很慢的话,就会让4个 G 的文件 dump 很长时间。磁盘很快使用 no。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
12月前
|
NoSQL 安全 关系型数据库
【Redis源码】详细的RDB和AOF持久化过程(五)
【Redis源码】详细的RDB和AOF持久化过程(五)
58 0
|
5月前
|
存储 NoSQL 关系型数据库
Redis持久化策略AOF、RDB详解及源码分析
Redis持久化策略AOF、RDB详解及源码分析
|
12月前
|
存储 NoSQL 关系型数据库
Redis的持久化策略(RDB、AOF、RDB-AOF混合持久化)
Redis的持久化策略(RDB、AOF、RDB-AOF混合持久化)
147 0
|
12月前
|
NoSQL Redis
Redis学习笔记-AOF 日志和 RDB快照
Redis学习笔记-AOF 日志和 RDB快照
92 0
|
存储 缓存 NoSQL
AOF和RDB持久化的区别
AOF和RDB持久化的区别
80 0
|
NoSQL Redis
你必须知道的Redis持久化机制-RDB快照
记录命令,持久化的数据量不大。但是在AOF日志恢复时,需要把日志的每条命令都执行一遍。如果日志很多,恢复过程就会变得很漫长。因此,Redis提供了另一种持久化机制,那就是RDB快照。
186 0
你必须知道的Redis持久化机制-RDB快照
|
NoSQL Redis 数据安全/隐私保护
Redis如何实现持久化(AOF、RDB、混合模式)的优缺点
Redis如何实现数据不丢失 Redis的读写操作都是在内存中,所以Redis性能才会高,但是当Redis重启后,内存中的数据就会丢失,那为了保存内存中的数据不会丢失,Redis实现了数据持久化机制,会把数据保存到磁盘,这样Redis重启就能够从磁盘恢复原有的数据
242 0
Redis如何实现持久化(AOF、RDB、混合模式)的优缺点
|
存储 缓存 NoSQL
配置文件详解、RDB 及 AOF 备份机制(二)|学习笔记
快速学习配置文件详解、RDB 及 AOF 备份机制(二)
226 0
配置文件详解、RDB 及 AOF 备份机制(二)|学习笔记
|
运维 NoSQL 大数据
持久化-RDB与AOF方案对比|学习笔记
快速学习持久化-RDB 与 AOF 方案对比
持久化-RDB与AOF方案对比|学习笔记
|
存储 缓存 NoSQL
持久化-AOF 持久化策略基本操作|学习笔记
快速学习持久化-AOF 持久化策略基本操作
108 0
持久化-AOF 持久化策略基本操作|学习笔记