数据库 发布日期:2024/12/27 浏览次数:1
Redis 是内存数据库,如果不能将内存中的数据保存到磁盘中,那么一旦服务器进程退出,服务器的数据库数据也会消失,所以Redis提供了持久化的功能,redis分为两种持久化方式:RDB和AOF。有以下几个特点:
1.RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
2.AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件后台重写,使得AOF文件的体积不至于过大。
3.如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化的方式。
4.你也可以同时开启两种持久化方式,在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据。因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。
1、概念
在指定的时间间隔内将内存中的数据集快照写入磁盘中,它恢复的时候是将快照中的文件直接读取到内存中。
2、持久化机制-BGSAVE
通常,会立即返回ok,Redis进程会执行fork操作创建子进程,Redis在fork时,父进程会继续为客户端提供服务,子进程会将数据持久化到硬盘上,然后退出。如果已经在后台执行保存或者正在运行另一个非后台保存的进程,特别是正在进行AOF写入时,则会返回错误。如果使用了bgsave任务,而正在进行AOF写入时,该命令将立即返回ok,并计划在下一次机会运行后台保存。阻塞只会在fork阶段。
客户端可以使用lastsave命令检查操作是否成功。
3、持久化机制-SAVE
不会接受客户端执行的操作命令,等持久化工作完成之后,会将新的文件替换旧的文件。
4、持久化机制-自动触发
在redis.conf
中可以配置,让用户自定义save
属性,让服务器每一段时间内执行一次bgsave
操作。
# 服务器在900秒内,对数据库进行了至少1次修改 save 900 1 # 服务器在300秒内,对数据库进行了至少10次修改 save 300 10 # 服务器在60秒内,对数据库进行了至少10000次修改 save 60 10000 # bgsave发生错误时是否停止写入,一般为yes stop-writes-on-bgsave-error yes # 持久化时是否使用LZF压缩字符串对象"htmlcode"># 开启aof持久化方式,默认no appendonly no # aof 持久化生成的文件名称 appendfilename "appendonly.aof" # 三种持久化机制 # appendfsync always appendfsync everysec # appendfsync no4、三种触发持久化机制
同步持久化,每次发生数据变更会被立即持久化到硬盘中,性能比较差,但是数据完整性好。
异步操作,每秒持久化数据到硬盘一次,可能会丢失一秒的数据。
从不持久化到硬盘。
5、AOF文件损坏
如果 aof 文件被破坏,redis服务是启动不了的。redis本身提供了修复了工具。redis-check-aof --fix appendonly.aof
5、优点
6、缺点
4、如何选择持久化机制
开启两种持久化方式,根据自己的业务需求针对redis进行配置的调整。