Redis之持久化

Redis之持久化

(一)问题产生

​ Redis是一款非常好用的键值对数据库,其高性能和灵活性而闻名,它是基于内存的来实现的,所以它有很多优势也伴随着一些缺陷。
​ 如,容量限制:内存并不是无限的,他很小且宝贵;易失:内存一断电就没了,Redis数据也会没有,还有一些安全性问题,而今天我们需要解决的是关于数据易失问题,提出数据持久化来解决。

(二)数据持久化

​ 数据持久化简单来说就是将数据放到磁盘中,就算断电也不会消失了,为此提供二种方式。RDB快照和AOF日志。

​ 无论是RDB还是AOF都是利用数据备份与恢复机制,只是他们的实现方式不同罢了。

RDB快照备份(默认)

SAVE 命令用于创建当前数据库的持久化快照,这个快照会保存到配置文件中指定的文件路径下,默认通常是 dump.rdb 文件。

redis 127.0.0.1:6379> SAVE 
OK

​ 值得注意的是, SAVE 命令本身不接受任何参数,默认情况下,这个文件通常被命名为 dump.rdb,并且存储在 Redis 服务器的安装目录或者配置文件中指定的其他目录。因此,如果有需要,你需要在配置文件中修改才可以。一般在redis.windows.conf文件中。可以使用查找

# The filename where to dump the DB
dbfilename dump.rdb
# Note that you must specify a directory here, not a file name.
dir ./

来分别修改默认文件名称以及地址。
SAVE 命令会阻塞 Redis 服务器,直到 RDB 文件完全写入磁盘。这意味着在持久化过程中,Redis 无法处理任何其他命令,这可能会对性能造成影响。
除了 SAVE,Redis 还提供了 BGSAVE 命令,这是一个异步操作,它会在后台创建 RDB 文件的快照,不会阻塞主进程。

当然,Redis也提供了自动备份的功能: save 秒钟 写操作次数

#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000

​ 恢复 RDB 文件也很简单,首先,确保备份的 RDB 文件(通常名为 dump.rdb)是最新的备份,并且没有损坏,停止 Redis 服务,以避免在恢复过程中数据被修改,将备份的 RDB 文件移动到 Redis 的数据目录中。可以使用 CONFIG GET dir 命令来查看 Redis 的数据目录,重新启动 Redis 服务。Redis 启动时会自动加载数据目录中的 RDB 文件,并恢复数据。

AOF日志备份

​ AOF持久化是一种将所有写操作记录到一个文件中的持久化方式(以日志的形式来记录每个写操作),与RDB不同的是他需要启动,同样也在配置文件中,将appendonly改成yes即可。

# Please check http://redis.io/topics/persistence for more information.

appendonly no

# The name of the append only file (default: "appendonly.aof")

appendfilename "appendonly.aof"

​ Redis 允许你设置不同的fsync策略。fsync 是一个操作系统调用,用于将文件缓冲区中的数据强制写入磁盘。
everysec:默认每秒进行一次 fsync 操作,这是一个折衷的选项,既保证了数据安全性,又不会太影响性能。
always:每次写操作后都进行 fsync,数据安全性最高,但可能会影响性能。
no:从不自动 fsync,依赖操作系统的缓冲区刷新机制,性能最好,但数据安全性最低。

# If unsure, use "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no

​ 随着时间的推移,AOF 文件可能会变得非常大,因为它记录了所有的写操作。Redis 会定期地对 AOF 文件进行重写,即创建一个新的 AOF 文件,只包含恢复当前数据集所需的最小命令集合。
​ Redis 可以自动触发 AOF 重写,当 AOF 文件的大小达到一定阈值时(例如,比上一次重写后的文件大指定百分比)。可以通过配置文件或运行时配置来设置 AOF 重写的相关参数,例如触发重写的文件大小阈值:

# Specify a percentage of zero in order to disable the automatic AOF
# rewrite feature.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

​ 当 AOF 文件大小比上一次重写后至少增加了 100%,并且文件大小至少为 64 MB 时,Redis 将自动触发 AOF 重写。
​ AOF 重写是在后台异步执行的,它使用子进程来完成重写任务,因此不会阻塞主进程的读写操作。
​ 除了自动触发,你也可以使用 BGREWRITEAOF 命令手动触发 AOF 重写

redis 127.0.0.1:6379>redis-cli BGREWRITEAOF

​ Redis 在重写 AOF 文件时,会创建一个临时的重写缓冲区,然后将缓冲区中的数据写入一个新的 AOF 文件。一旦新的 AOF 文件写入完成,Redis 会用它替换旧的 AOF 文件。可以使用 redis-cli info persistence 命令来监控 AOF 重写的进度和状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值