分享更有价值
被信任是一种快乐

Redis如何实现持久化

文章页正文上

本篇内容介绍了“Redis如何实现持久化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis 的读写都是在内存中进行的,所以它的性能高。而当我们的服务器断开或者重启的时候,数据就会消失,那么我们该怎么解决这个问题呢?其实 Redis 已经为我们提供了一种持久化的机制,分别是 RDB 和 AOF 两种方式,接下来跟着我一起看看这两个锦囊都是怎么保证数据的持久化的。由于 Redis 是基于内存的数据库,所以当服务器出现故障的时候,我们的数据就得不到安全保障。这个时候就需要将内存中的数据存储到磁盘中,当我们服务器重启时,便可以通过磁盘来恢复数据,这个过程就叫做 Redis 持久化。Redis持久化RDB全称Redis Database Backup file(Redis数据备份文件),也可以称为Redis数据快照。RDB 文件是一个经过压缩的二进制文件(默认:dump.rdb);RDB 文件保存在硬盘里;通过保存数据库中的键值对来记录数据库状态。当 Redis 持久化时,程序会将当前内存中的数据库状态保存到磁盘中。创建创建 RDB 文件主要有两个 Redis 命令:SAVE 和 BGSAVE。同步操作,执行命令时,会阻塞 Redis 服务器进程,拒绝客户端发送的命令请求。代码示例:图示:Save命令异步操作,执行命令时,子进程执行保存工作,服务器还可以继续让主线程处理客户端发送的命令请求。代码示例:图示:bgSave命令载入工作在服务器启动时自动执行。载入服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。Redis 允许用户通过设置服务器配置的 save 选项,让服务器每隔一段时间自动执行一次 BGSAVE 命令。提供配置如下:在这种情况下,只要满足以下条件中的一个,BGSAVE 命令就会被执行:服务器在 900 秒之内,对数据库进行了至少 1 次修改了;服务器在 300 秒之内,对数据库进行了至少 10 次修改。服务器程序会根据 save 选项所设置的保存条件,设置服务器状态 redisServer 结构的 saveparams 属性。saveparams 属性是一个数组;数组中的每一个元素都是一个 saveparam 结构;每个 saveparam 结构都保存了一个 save 选项设置的保存条件。dirty 计数器记录距离上一次成功执行 SAVE 命令或 BGSAVE 命令之后,服务器对数据库状态进行了多少次修改(包括写入、删除、更新等操作)。是一个 UNINX 时间戳,记录了服务器上一次成功执行 SAVE 命令或者 BGSAVE 命令的时间。服务器周期性操作函数 serverCron (该函数对正在运行的服务器进行维护)默认每隔 100 毫秒就会执行一次,其中一项工作就是检查 save 选项所设置的保存条件是否已经满足,满足的话就执行 BGSAVE 命令。代码示例:RDB 文件默认的配置如下:AOF全称为 Append Only File(追加日志文件)。日志是写后日志,Redis 是先执行命令,把数据写入内存,然后才记录日志。写后日志通过保存 Redis 服务器所执行的写命令来记录数据库状态;写入 AOF 文件的所有命令都是以 Redis 的命令请求协议格式保存的。AOF 持久化流程实现主要是通过以下流程来实现的:AOF流程若 AOF 持久化功能处于打开状态,服务器在执行完一个命令后,会以协议格式将被执行的写命令追加到服务器状态的 aof_buf 缓冲区的末尾。服务器每次结束一个事件循环之前,都会调用 flushAppendOnlyFile 函数,这个函数会考虑是否需要将 aof_buf 缓冲区中的内容写入和保存到 AOF 文件里。flushAppendOnlyFile 函数执行以下流程:WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件;SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。这个函数是由服务器配置的 appendfsync 的三个值:always、everysec、no来影响的,也被称为三种策略。每条命令都会 fsync 到硬盘中,这样 redis 的写入数据就不会丢失。Always每秒都会刷新缓冲区到硬盘中(默认值)。everysec根据当前操作系统的规则决定什么时候刷新到硬盘中,不需要我们来考虑。no鸿蒙官方战略合作共建——HarmonyOS技术社区创建一免费云主机、域名个不带网络连接的伪客户端;从 AOF 文件中分析并读取出一条写命令;使用伪客户端执行被读出的写命令;一直执行步骤 2 和 3,直到 AOF 文件中的所有写命令都被处理完毕为止。为何需要文件重写:为了解决 AOF 文件体积膨胀的问题;通过重写创建一个新的 AOF 文件来替代现有的 AOF 文件,新的 AOF 文件不会包含任何浪费空间的冗余命令。文件重写的实现原理:不需要对现有的 AOF 文件进行任何操作;从数据库中直接读取键现在的值;用一条命令记录键值对,从而代替之前记录这个键值对的多条命令。为不阻塞父进程,Redis 将 AOF 重写程序放到子进程里执行。在子进程执行 AOF 重写期间,服务器进程需要执行三个流程:鸿蒙官方战略合作共建——HarmonyOS技术社区执行客户端发来的命令;将执行后的写命令追加到 AOF 缓冲区;将执行后的写命令追加到 AOF 重写缓冲区。服务器流程AOF 文件默认的配置如下:通过以上的简介,想必大家都对 Redis 持久化有了大致的了解,那么这两种方式,我们该如何选择呢?对于大中型的应用,我们既想保证数据完整性又想保证高效率,就应该结合使用 RDB 和 AOF 两种方式;如果只是需要保证数据的完整性,保护数据不会丢失,那么优先使用 AOF 方式;如果是处理大规模的数据恢复,追求更高更快的效率的话,优先使用 RDB 方式。也可以参照下图进行选择:“Redis如何实现持久化”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注云技术网站,小编将为大家输出更多高质量的实用文章!

相关推荐: vue多页面前端项目的命令怎么使用

今天小编给大家分享一下vue多页面前端项目的命令怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 首先,让我们创建一个基本的Vue多页面项…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册