redis中数据持久化(四)

来源:互联网 发布:广东高考难度 知乎 编辑:程序博客网 时间:2024/05/29 19:38

redis中数据持久化介绍

目前会在两种情况下使用

1. 作为数据库使用;

2. 作为缓存服务器使用。

redis的高性能很大程度上是因为其把数据存储在内存中,然而当redis重启时或者意外当机后,数据都会丢失。为了不让redis中数据丢失,我们需要把内存中的数据以某种方式存储的硬盘中,使得redis服务器重启后数据可以恢复,这一过程称之为持久化

redis支持两种方式的数据持久化,一是RDB方式;二是AOF方式。

RDB方式会根据指定的规则,“定时”将内存中的数据写入硬盘中;

AOF方式每次执行命令会将命令本身记录下来。

两种方式都可以单独使用,通常是两者配合使用。下面分别对两种方式介绍。


以下配置都是通过修改redis根目录下的redis.conf文件

一. RDB方式

RDB的方式是通过快照(snapshot)完成,当符合规则时redis会把内存的数据生成一个副本并存储在硬盘中,这个过程称之为“快照”。

redis会在以下几种情况执行快照

1. 根据配置规则自动快照

2. 用户执行save或bgsave命令

3. 执行flushall命令

4. 执行复制时。

下面对以上4中方式分别介绍

1.1 根据配置规则自动快照

用户可以自定义快照条件,用户可以在配置文件中自定义,格式如下:

save 时间 改动键的个数

save是关键字;时间是指在多长时间内,单位是秒;改动键的个数是指在指定时间内,被更改的个数大于我们指定的改动键个数时,自动执行快照。


如:

save 100 1

save 60 10

save 30 1000

命令允许存在多个,它们之间的关系式或者关联。以上的命令意思是,每隔100秒,保存一次;或者,60秒内,有10个以上键值发生变化;或者,30秒内,有1000个键值发生变化。当满足以上3个条件任何之一,redis会自动快照。


1.2 用户执行save或bgsave命令

当我们需要重启redis服务、迁移redis服务、备份redis服务时,需要手动执行快照,这时可以使用save或者bgsave命令。

save:同步执行,这时会影响用户请求,当redis数据比较大时,不建议使用此命令;

bgsave:后台异步执行,不影响用户对redis的请求。可以使用lastsave命令,查看最后快照时间。


1.3 执行flushall命令

执行flushall命令时,会清除redis中所有数据。当有任何一个自定义快照条件是,都会触发快照操作;若没有自定义任何快照规则,则不会触发自定义快照。


1.4 执行复制时。

当redis服务配置了主从复制时,即使没有配置任何自定义快照条件,没有执行任何手动操作(执行save或者bgsave),也会执行快照。


redis默认会将快照文件存储在当前目录下的dump.rdb文件中,可以配置dir和dbfilename两个参数分别之间文件路径和文件名。

如:

dir c:\gyc

dbfilename dump.rdb


注:通过RDB方式持久化redis,一旦redis异常退出,那么都会丢失最后一次快照后的所有更改的数据。如果不能接受丢失的这些数据,建议使用AOF方式持久化数据。

二. AOF(append only file)方式

当使用redis来存储非临时数据时,需要开启AOF方式持久化。AOF将redis执行的每一条命令追加到磁盘中,这样会降低redis的性能,不够还是可以接受的。

2.1. 开启AOF方式

默认情况redis没有开启AOF方式,可以通过appendonly命令来启用,如:

appendonly yes

可以指定存储文件路径,如:

dir c:\redis_aof

appendfilename appendonly.aof


2.2. 同步到磁盘中

虽然每次操作,redis都会把命令写到AOF文件中,但是由于操作系统缓存机制,这时并没有把所有数据真正写到磁盘中,而是进入到硬盘缓存。一般情况下,系统会每隔30秒做一次把硬盘缓存中数据写入磁盘中。

可以通过以下命令,执行:

# appendfsync always

# appendfsync no

appendfsync everysec


第一条命令是,每次执行写入,都会执行同步,最安全也最慢;

第二条命令是,不主动执行同步,而是由系统自动执行,也就是30秒执行,不建议,有可能会丢失30秒的数据;

第三条命令是,每秒执行一次,redis默认执行此种;



redis支持同时开启RDB和AOF,系统重启后,redis会使用AOF来恢复数据。这样丢失的数据会最少。

1 0
原创粉丝点击