Redis学习-4-2 Redis持久化
Posted companion
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis学习-4-2 Redis持久化相关的知识,希望对你有一定的参考价值。
1.持久化:
数据保存到一个不会丢失的地方就是持久化,可认为是永久存储的;
2.Redis持久化:
Redis的数据存储在内存中,是不安全的,所以Redis有自己的持久化方案,将内存数据定期保存到磁盘文件中,当Redis崩溃了或者计算机意外关机了,重启Redis服务的时候,将磁盘中文件恢复到内存中来;
3.Redis持久化方案:
1.RDB:
Redis Data Base,就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。
RDB保存了在某个时间点的数据集(全部数据),存储在一个二进制文件中,只有一个文件,默认是dump.rdb。RDB默认是开启的,默认保存到启动redis的文件中。
二进制文件的读写特别高,redis.conf文件中配置即可,
保存策略的修改 save 900 1:900秒内有1个key被改动,可以配置多个策略,同时起作用,任意一条进行内存数据就写到文件中
dbfilename:设置RDB的文件名,默认是dump.rdb
dir:指定RDB文件的存储位置,默认是./ 就是当前目录,在哪里启动,哪里就是当前目录
配置步骤:
在redis的cli窗口中执行shutdown将redis停掉
在linux系统窗口中删除dump.rdb文件: rm dump.rdb -f
ll dump.rdb 文件已被删除
cd到redis.conf
vim redis.conf
搜索snap 可以看到默认配置的三个策略,任意一个满足就都执行
关闭RDB的方式: 将save ""注释去掉,将save三种策略注释,就关闭了
当然可以自己设置快照策略:
save 20 3;20秒内有3个数据做改动就保存
dbfilename dump.rdb
dir ./
剩下两个参数不改动
./redis-server ../redis.conf
ll dump.rdb
ping =>PONG
set k1 v1
set k2 v2
set k3 v3
满足了20秒内有3个数据做改动了就开始save执行RDB了
ll dump.rdb就有这个文件了
存在的问题:save <seconds> <changes>时间和修改的数目
save 300 10,300秒内只改变了9个key的时候redis就崩溃了,那这9个数据就丢失了,没保存上
所以如果对数据保存要求不高且希望保存性能高,可以使用RDB的方式
适合做备份,条件满足就会将数据写道二进制文件中,速度快,但是有可能会造成数据丢失,默认是开启的;
2.AOF:
Append-only file:每次将redis中数据修改的命令都记录到AOF文件中,不记录读取,只记录修改,每一个数据修改命令记录到文件中,redis重启的时候读取文件,将命令都执行一遍;
文本文件记录的写入命令,默认是没有开启的,在redis.conf文件中开启AOF,将redis.conf文件中的appendonly修改为yes就开启了
appendfilename appendonly.aof
dir:默认是./
appendfsync:配置向aof文件写命令数据的策略: 有以下参数来做:
(1)no :不主动进行同步操作,而是完全交由操作系统来做(即每30秒一次),比较快但不是很安全,会有数据丢失;
(2)always:每次执行写入都会执行同步,慢一些但是比较安全
(3)everysec:每秒执行一次同步操作,比较平衡,介于速度和安全之间,这个是默认项;
停掉redis,修改配置文件redis.conf,aof文件中可以编辑,可以修改内存崩溃的数据将其删除
aof文件越来越大,数据恢复的时候会越来越慢,但是redis有个redis的机制:
set age 10 ,set age 20 ,set age 30,aof文件重写的时候set age 30成功了,将set age 10和set age 20 删除掉,缩小aof的尺寸,开始执行重写就是auto-aof-rewrite-min-size: 默认64mb,允许重写的最小aof文件大小,当aof文件大于64m的时候就开始整理aof文件,去掉无用的操作命令,缩小aof文件;
如果对数据丢失要求高数据很重要,速度要求不是很快的话可以使用aof,
aof和rdb可以同时存在同时起作用,首先读取aof文件,对数据保存比rdb更完整的
AOF:
以上是关于Redis学习-4-2 Redis持久化的主要内容,如果未能解决你的问题,请参考以下文章