文章目录
一、redis持久化
1.1 redis持久化RDB
1.1.1 简介
Redis RDB是Redis数据库持久化的一种方式。Redis是一个内存数据库,可以将数据存储在内存中,但是当Redis重启时,如果没有进行持久化操作,数据将会丢失。为了避免这种情况,Redis提供了RDB持久化机制。
RDB持久化机制是将Redis数据在指定的时间间隔内dump(转储)到磁盘上,以保证数据的持久化。RDB文件是一个二进制文件,其中包含了Redis数据的完整快照,可以在需要的时候快速地进行数据恢复。可以通过配置文件指定持久化的时间间隔,也可以通过命令手动执行。
1.1.2 优缺点
优点:
- 适合大规模的数据恢复;
- 按照业务定时备份;
- 对数据完整性和一致性要求不高;
- RDB 文件在内存中的加载速度要比 AOF 快得多;
缺点:
- 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失从当前至最近一次快照期间的数据,快照之间的数据会丢失;
- 内存数据的全量同步,如果数据量太大会导致I/O严重影响服务器性能;
- RDB依赖于主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟。fork的时候内存中的数据被克隆了一份,大致2倍的膨胀性,需要考虑;
1.1.3 持久化的自动触发和手动触发
配置自动触发持久化
- 找到redis.conf文件位置
- 使用vi或者vim进入文件
vim /myredis/redis.conf
- 在redis.conf中添加自动触发配置
格式:save 参数1 参数2
- 参数1:秒数
- 参数2:修改频率
可以设置多个触发,使用空格分隔
示例:在600秒时效更改1次触发自动保存,在300秒时效更改20次触发自动保存,在60秒时效更改1000次触发自动保存
save 600 1 300 20 60 1000
手动触发持久化
Redis提供了两个命令来生成RDB文件,分别是save和bgsave:
#SAVE命令是Redis的一种同步持久化方式,当执行SAVE命令时,Redis会阻塞所有的客户端请求,将数据同步地写入磁盘。在持久化完成之前,Redis不会执行其他的命令。
save
#BGSAVE命令是Redis的一种异步持久化方式,当执行BGSAVE命令时,Redis会在后台进行持久化操作,不会阻塞其他的命令执行。B GSAVE命令使用的是子进程的方式进行持久化,因此不会影响Redis的性能。
bgsave
获取最后一次成功使用快照的时间戳:
lastsave
1.2 redis持久化AOF
1.2.1 简介
Redis持久化AOF(Append-Only File)是一种将Redis操作写入文件的方式,与Redis RDB不同,AOF持久化方式不是将Redis中的数据直接写入磁盘,而是将Redis的所有操作以追加的方式记录在一个日志文件中。
在AOF持久化模式下,Redis将每个写命令追加到AOF文件的末尾。当Redis重新启动时,它可以通过重播AOF文件中的所有命令来还原数据集。AOF文件中的命令是一条接一条地追加到文件中,这意味着AOF文件中的所有命令都是按照它们实际执行的顺序排列的。
1.2.2 优缺点
优点:
- 使用AOF Redis更加持久:您可以有不同的fsync策略:根本不fsync、每秒fsync、每次查询时fsync。使用每秒fsync的默认策略,写入性能仍然很棒。fsync 是使用后台线程执行的,当没有 fsync 正在进行时,主线程将努力执行写入,因此您只能丢失一秒钟的写入。
- AOF 日志是一个仅附加日志,因此不会出现寻道问题,也不会在断电时出现损坏问题。即使由于某种原因(磁盘已满或其他原因) 日志以写一半的命令结尾,redis-check-aof 工具也能够轻松修复它。
- 当AOF变得太大时, Redis能够在后台自动重写 AOF,重写是完全安全的,因为当Redis 继续附加到旧文件时,会使用创建当前数据集所需的最少操作集生成一个全新的文件,一旦第二个文件准备就绪,Redis 就会切换两者并开始附加到新的那一个。
- AOF 以易于理解和解析的格式依次包含所有操作的日志。您甚至可以轻松导出 AOF 文件。例如,即使您不小心使用该FLUSHALL命令刷新了所有内容,只要在此期间没有执行日志重写,您仍然可以通过停止服务器、删除最新命令并重新启动 Redis 来保存您的数据集.
缺点:
- AOF文件通常比相同数据集的等效RDB文件大。
- 根据确切的fsync策略,AOF可能比RDB慢。一般来说,将fsync设置为每秒性能仍然非常高,并且在禁用 fsync的情况下,即使在高负载下它也应该与 RDB一样快。即使在巨大的写入负载的情况下,RDB 仍然能够提供关于最大延迟的更多保证。
1.2.3 AOF开启功能配置
- 打开配置文件
#使用vi或vim打开redis.conf配置文件
vim redis.conf
- 开启AOF
#找到appendonly no配置,修改成yes
appendonly yes
- 修改写回策略
#如果有需要更改写回策略,找到appendfsync everysec进行修改
#例如:
appendfsync no
三种写回策略:
always:该策略表示每次对Redis进行写操作时都要将写命令追加到AOF文件中,即每次写操作都会同步到磁盘,保证了数据的完整性和一致性,但会降低Redis的性能和吞吐量。
everysec:该策略表示每秒将写命令同步到磁盘,即Redis会每秒对AOF文件进行一次fsync操作,保证了数据的一致性,同时减少了对磁盘I/O的操作,提高了Redis的性能和吞吐量。(默认写回策略)
no:该策略表示不进行AOF持久化,即Redis只使用内存进行数据存储,当Redis进程异常退出时,所有的数据将会丢失,不适合对数据完整性和一致性要求较高的场景。