当前位置: 代码网 > it编程>数据库>Redis > Redis分布式缓存-Redis持久化详解

Redis分布式缓存-Redis持久化详解

2024年12月26日 Redis 我要评论
rdb持久化rdb全称redis database backup file(redis数据备份文件),也被叫做redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当redis实例故障重启

rdb持久化

rdb全称redis database backup file(redis数据备份文件),也被叫做redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。

当redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为rdb文件,默认是保存在当前运行目录。

执行时机

rdb持久化在四种情况下会执行:

  1. 执行save命令
  2. 执行bgsave命令
  3. redis停机时
  4. 触发rdb条件时

save命令

执行下面的命令,可以立即执行一次rdb:由redis主进程来执行rdb,会阻塞所有命令,跟mysql的全局锁类似,会直接阻塞所有命令,只有在数据迁移才会用到。

bgsave命令

这个命令执行后会开启独立进程完成rdb,主进程可以持续处理用户请求,不受影响。

停机时

redis停机时会执行一次save命令,实现rdb持久化。

触发rdb条件

# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用rdb
save 900 1
save 300 10
save 60 10000

rdb原理

bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。这里fork所复制的数据,只是复制主进程的页表(内存的映射,相当于指针),并不是真正的数据,速度较快,创建子进程的过程不会太久,完成fork后读取内存数据并写入rdb 文件。

fork采用的是copy-on-write技术:

  • 当主进程执行读操作时,访问共享内存;
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作。

小结

rdb方式bgsave的基本流程:

  • fork主进程得到一个子进程,共享内存空间,从而异步处理磁盘io这种耗时较长的过程
  • 子进程读取内存数据并写入新的rdb文件
  • 用新rdb文件替换旧的rdb文件

rdb会在什么时候执行?save 60 1000代表什么含义?

  • 默认是服务停止时
  • 代表60秒内至少执行1000次修改则触发rdb

rdb的缺点:

  • rdb执行间隔时间长,两次rdb之间写入数据有丢失的风险
  • fork子进程、压缩、写出rdb文件都比较耗时

aof持久化

aof原理

aof全称为append only file(追加文件)。redis处理的每一个写命令都会记录在aof文件,可以看做是命令日志文件。类似于mysql的undo log用于记录命令的逻辑而非具体的数据。

aof配置

aof默认是关闭的,需要修改redis.conf配置文件来开启aof:

# 是否开启aof功能,默认是no
appendonly yes
# aof文件的名称
appendfilename "appendonly.aof"

aof的命令记录的频率也可以通过redis.conf文件来配:

# 表示每执行一次写命令,立即记录到aof文件
appendfsync always
# 写命令执行完先放入aof缓冲区,然后表示每隔1秒将缓冲区数据写到aof文件,是默认方案
appendfsync everysec
# 写命令执行完先放入aof缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no

三种策略对比:

aof文件重写

因为是记录命令,aof文件会比rdb文件大的多。而且aof会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让aof文件执行重写功能,用最少的命令达到相同效果。

如图,aof原本有三个命令,但是

set num 123 和 set num 666

都是对num的操作,第二次会覆盖第一次的值,因此第一个命令记录下来没有意义。

所以重写命令后,aof文件内容就是:

mset name jack num 666

redis也会在触发阈值时自动去重写aof文件。阈值也可以在redis.conf中配置:

# aof文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# aof文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb

rdb与aof对比

rdb和aof各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

  • tomcat在nginx中的配置方式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档一、下载安装tomcat将下载的tomcat压缩包,通过ssh工具传输到linux的目录/usr/src/目录下,并…

    2024年12月29日 数据库
  • 解决虚拟机NAT模式无法上网问题

    一、确认虚拟机的ip地址确认虚拟机的ip地址与本机的vmnet8的ip地址是否在同一个网段且网关是否一致:cd /etc/sysconfig/network-scripts/lsv…

    2024年12月29日 数据库
  • Redis GEO实现附近搜索功能

    Redis GEO实现附近搜索功能

    公司最近来了一个新项目,做小程序招聘。其中有一个需求是实现附近岗位推荐。由于用户量不大,决定采用redis来实现。之前没有接触过。现在用来记录一下。(redis... [阅读全文]
  • 深入了解Redis的看门狗机制

    深入了解Redis的看门狗机制

    redis锁的延期机制,通常被称为“看门狗”机制,是为了处理持有锁的客户端在执行任务时发生崩溃或网络分区等异常情况,导致锁无法被释放,从... [阅读全文]
  • Redis实现锁续期的项目实践

    Redis实现锁续期的项目实践

    解决方案在使用redis作为分布式锁的存储时,如果一个任务需要长时间执行,并且在这段时间内锁会过期,那么就需要一种机制来自动延长锁的有效期,即续期。通常情况下,... [阅读全文]
  • Redis存储断点续传文件状态的最佳实践

    Redis存储断点续传文件状态的最佳实践

    1.redis中存储文件上传状态redis 提供了丰富的数据结构,可以灵活地存储和更新文件上传的各类状态。以下是几种常见的实现方式。使用 hash 存储文件状态... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com