不同于memcached等完全基于内存的缓存中间件,redis同时还提供了持久化功能,这也是为什么redis不仅可以用来做数据缓存还可以用来做数据存储,服务器节点宕机之后可以通过事先持久化的数据还原数据到某个时间点的状态。redis提供了两种持久化机制rdb和aof,准确的讲应该是三种,redis还提供了虚拟内存机制,但是性能比较差,使用场景有限。
rdb持久化是把当前数据库中的数据备份到一个rdb文件中,rdb文件是一个经过压缩的二进制文件,通过这个文件可以还原生成rdb文件时的数据库状态。
redis提供了两个命令用于生成rdb文件,即save和bgsave。save命令会阻塞主进程,在执行该命令的过程中服务器会拒绝客户端命令。只有当save命令执行完之后服务器才会继续处理客户端的命令,而bgsave命令是在子进程中执行,在执行该命令的过程中服务器还可以继续处理客户端的命令。save命令和bgsave命令不能同时执行,当正在执行bgsave命令时,客户端发送的save命令会被拒绝,两个bgsave命令也不能同时执行。
服务器在900秒之内对数据库进行了至少一次修改。服务器在300秒之内对数据库进行了至少10次修改。服务器在60秒之内对数据库进行了至少10000次修改。redis通过一个saveparam结构体来保存save参数:
服务器结构体redisserver添加了三个字段:saveparams字段,保存所有的save参数。dirty字段,来保存上一次成功执行save或bgsave命令之后,服务器对数据库执行的修改次数。lastsave字段,记录服务器上一次执行save和bgsave的unix时间戳。
rdb是通过备份某个时间点的数据来保存数据库状态,而aof是通过保存服务器所执行的命令来保存数据库的状态的。当结点宕机重启时通过载入aof文件并且执行文件中的命令就可以恢复生成aof文件时的数据库状态,如果同时存在rdb文件和aof文件,服务器优先载入aof文件来还原数据库状态。
aof实现分为三步:命令追加、文件写入、文件同步。现代操作系统中为了提高文件写入效率,当用户调用了write函数时操作系统通常会将写入的数据暂时保存在一个内存缓冲区里面,等到缓冲区写满或者超过指定的时限之后,才真正地将缓冲区中的数据写入到磁盘中。
通过设置appendfsync参数来设置aof文件生成策略,它有三个可选值:
always,将aof缓冲区的所有内容写入并同步到aof文件中,这种方式数据安全性最高,但是cpu消耗大。everysec,将aof缓冲区中的所有内容写入到aof文件,如果上次同步aof文件的时候距离现在超过一秒钟,那么再次对aof文件进行同步,并且这个同步操作由一个线程专门负责执行,数据安全性不如always,当服务器出现故障时会出现1s的数据空窗期,但是cpu消耗较always小。no,将aof缓冲区中的所有内容写入到aof文件,但并不对aof文件进行同步,何时同步由操作系统来决定。
这种方式cpu消耗低,但是数据安全性差,而且单次同步时间最长。如果用户不进行设置,默认值为everysec。相比于rdb持久化,aof持久化执行的频率要高得多,所以aof丢失数据的时间窗比rdb要小,但是也要耗费更多的cpu时间和io资源。rdb和aof还有一个不同点就是,rdb文件替换是一个原子操作所以rdb文件肯定是完整,而aof文件有可能是不完整的,有可能命令没写完就宕机了或者磁盘坏了。但是也不用担心这种情况,一是这种情况出现的概率非常低,二是redis提供了修复aof文件的工具。
当redis服务器长时间运行时,aof文件的内容会越来越多,文件的体积也会越来越大,为了解决这个问题,redis提供了aof文件重写功能,消除一些冗余命令。
redis提供了 bgrewriteaof命令来执行aof重写,aof重写不对旧aof文件有依赖,而是通过查询现有数据库中的键值对的状态来生成一个新的aof文件,重写动作在子进程中完成,生成一个新文件然后重命名替换掉老文件。在重写的过程中,客户端请求的新命令会追加到aof重写缓冲区中,子进程完成重写之后,发送一个信号消息通知主进程把重写缓冲区中的内容同步到重写后的aof文件中,这个过程会阻塞主进程。
开放原子开源基金会赴北华大学走访交流
禁止华为参与5G网络建设对欧洲有利吗?德国电信这样说
人工智能的未来必将是人机协作
贸泽电子总部版图再扩张 将迎接下一个十年
汽车OTA和远程诊断技术
关于redis中数据存储的机制解析
大数据和人工智能如何防控疫情
5G投票这件事,联想到底错没错?
紫外工业相机的应用
蓝牙耳机性价比排行2020_主动降噪无线蓝牙耳机品牌
wan接口是什么意思
引爆智能手机市场 总被严重低估的华为终端
便携医疗设备的IWAS无线充电设计有什么优势?
使用荣耀8青春版为精致生活加分,幸福指数倍增!
示波器带宽你真的理解吗?
“5G+车联网”促进产业跨界融合,实现共赢发展
苹果智能音箱定位尴尬 在华突围不易
ICDIA 2022:沐创集成电路邀您无锡相见
中关村“大众创业、万众创新”的新时代:下篇·机遇未来
LG臻韵·干衣机震撼上市 双变频技术成为了行业焦点