redis持久化的两种方式

薄洪涛6年前PHP1089

redis为了内存数据的安全考虑,会把内存中的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。

数据保存到硬盘的过程就称为“持久化”效果。

redis支持两种持久化方式: 

(1)snapshotting(快照)默认方式 

(2)append-only file(缩写aof)的方式

1snapshotting快照方式持久化

该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中(备份文件名字默认是dump.rdb),如果数据非常多(10-20G)就不适合频繁进行该持久化操作。

(1)如何开启,默认开启,有自己的触发条件:

image.png

image.png

注意:屏蔽该触发条件,即可关闭快照方式。

(2)可以设置保存位置,和备份的文件名

备份文件名字默认是dump.rdb,我们也可以自己修改,

可以通过配置文件,来完成修改。

image.png

(3)手动发起快照:

两种方式完成手动保存。

方式一:在登录状态:

则直接执行bgsave即可。

image.png

方式二 :在没有登录状态

./redis-cli bgsave 手动发起一次快照保存操作

image.png


(4)缺点:

由于快照方式是在一定间隔做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。 

2append-only-file  追加方式持久化AOF

本质:把用户执行的每个“写”指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。

(1)如何开启

appendonly   yes //启用 aof 持久化方式

appendfilename  appendonly.aof   //保存命令的文件(可以指定路径)

打开redis.conf配置文件,进行打开配置。

 image.png

(2)触发条件

# appendfsync always   //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

appendfsync everysec   //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

# appendfsync no   //完全依赖 os,性能最好,持久化没保证

打开配置文件进行如下修改。

image.png

 image.png

(3)aof文件的重写:

例如:可以把多个incr指令换为一个set指令

问题:

每个命令重写一次aof,如果某个key操作100次,产生100行记录,aof文件会很大,怎么解决?

比如,当执行多次incr  number操作,aof 文件中会保存多次incr number的命令。这样会增大aof文件容量,我们可以对aof文件重写,把里面重复的命令压缩成一条命令。

就比如执行10次incr number 压缩成set number 11

执行重写的命令是:

执行重写可以在登录状态下执行,直接输入bgrewriteaof,也可以在未登录状态下执行,

语法:./bin/redis-cli –a  密码   bgrewriteaof

 image.png

注意点:如果两种持久化方式都开启,则以aof为准。


标签: redis持久化

相关文章

不同语言AES加密结果不同

不同语言AES加密结果不同

最近一直在和某保险公司的联调接口,他们的接口是AES加密过的,就是请求的报文体需要加密,返回的报文体需要解密;java实现的,然后我这边用php去调用,发现先了一件诡异的事情,两种语言的加密结果不一致...

Elasticsearch第三篇之全文搜索及在Yii2.0中的使用

Elasticsearch第三篇之全文搜索及在Yii2.0中的使用

前几天做了一个模块,大数据的搜索,其实也不是特别大,组合起来差不多800万左右,用的是mysql数据库,需求有这么变态的两点;需要按照地址去搜索按照起止时间去搜索别的不说,就这两条,mysql也就只能...

php使用curl获取elasticsearch中数据

我最近在做一个电动车的项目,其中,有一个功能是这样的,我需要获取指定车辆的最新的五条位置信息,位置信息是保存到es库中的,我使用的是Yii2.0框架,本来想使用Yii封装的组件去获取数据的,然后觉得麻...

YII2独立开发遇到的坑

    之前开发的时候,遇到图片上传什么的都是直接用前辈们配好的插件等等,换了家公司以后,要自己独立开发项目,顿时遇到了问题,开始是项目的配置,然后在添加的时候遇到了图片上传的问题...

Yii2.0 文件队列的使用

最近做了一个文件上传+处理的功能,需求是这样的,上传并读取.doc文件,并解析里面的内容入库读取文件并入库是使用python处理的,每个文件大约需要处理5-6秒,上传是使用的Yii2,我这里的思路是把...

Elasticsearch为什么搜索那么快?

Elasticsearch为什么搜索那么快?

介绍Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lu...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。