文章插图
今天分享一下redis的持久化、事务、管道相关的知识点 , 实现快速入门 , 丰富个人简历 , 提高面试level , 给自己增加一点谈资 , 秒变面试小达人 , BAT不是梦 。
Redis是一个键值对数据库 , 服务器中通常包含着任意个非空数据库 , 而每个非空数据库中又可以包含任意个键值对 , 我们将是服务器中的非空数据库以及它们的键值对统称为数据库状态 。
文章插图
Redis是内存数据库 , 它将数据存储在内存中 , 如果不能将内存中的数据持久化到磁盘中 , Redis突然宕机 , 会导致数据丢失 。
为了解决这个问题 , Redis提供了RDB持久化功能 , RDB持久化会将Redis在内存中的数据库状态保存到磁盘中 , 避免数据意外丢失 。
一、RDB持久化RDB , 英文全称Redis DataBase , 在指定的时间间隔 , 将内存中的数据写入磁盘 , 待恢复时再将磁盘中的数据写入内存 。
1、自动触发redis.conf配置文件中 , save <seconds> <changes> , 比如 save 60 20 , 在60秒内修改20次就自动触发RDB备份 。
2、手动触发通过save和bgsave手动触发RDB备份 。
(1)save , 在主程序中执行会阻塞当前Redis服务器 , 直到RDB持久化完成 , 也就是说save持久化期间 , Redis就不能用了 , 禁止使用 。
(2)bgsave , 不阻塞当前Redis服务器 , Redis会fork一个子进程 , 异步进行快照操作 。
禁用快照:redis-cli config set save "" 。
3、设置保存条件服务器程序会根据save选项所设置的保存条件 , 设置服务器状态redisServer结构的saveparams属性 。
dirty计数器记录距离上次成功执行save命令后 , 服务器对数据状态进行了多少次修改 。
lastsave属性是一个UNIX时间戳 , 记录了服务器上一次成功执行save命令的时间 。
属性是一个数组 , 数组中的每个元素都是一个saveparam结构 , 每个saveparam结构都保存了一个save选项设置的保存条件 。
文章插图
以上就是Redis服务器根据save选项所设置的保存条件 , 自动执行bgsave命令 , 进行间隔性数据保存的实现原理 。
4、加解密RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件 , 通过该文件可以还原生成RDB文件时的数据库状态 。
5、RDB持久化优缺点(1)优点
- 适合大规模的数据备份、恢复 。
- 可以定时备份 。
- 对数据一致性、完整性要求不高的场景可以使用 。
- RDB文件在内存中的加载速度要比AOF块 。
- 因为是定时备份 , 如果Redis宕机的话 , 会丢失一部分数据 。
- 因为是数据的全量同步 , 如果数据量过大 , 会产生大量IO , 严重影响服务器性能 。
- RDB持久化时 , 会fork一个子进程 , 如果数据过大 , 可能会导致服务器的瞬间延迟;fork的时候内存中的数据会被克隆一份 , 是否会造成内存溢出 , 值得考虑 。
(2)手动执行save、bgsave命令 。
(3)执行flushall、flushdb命令 , 产生的.rdb文件是空的 。
(4)执行shutdown命令 , 且没有设置AOF持久化 。
(5)主动复制时 , 主节点自动触发 。
注意:save和bgsave不能同时执行 , 如果bgsave命令正在执行 , 那么客户端发送的save命令会被拒绝执行 , 服务器禁止save和bgsave同时执行是为了避免父进程和子进程同时执行两个rdbSave调用 , 防止产生竞争条件 。
创建RDB文件的实际工作是由rdb.c/rdbSave函数完成 , save和bgsave会以不同的方式调用这个函数 。
推荐阅读
- 华容道走法图解 华容道走法
- 游泳的技巧与方法图解 游泳的技巧
- 自动伞伞柄图解 伞推上去扣不住怎么办
- 绳子腰带的系法图解 腰带的系法图解
- 五彩绳怎么编成手链 五彩绳手链编法图解
- 臂力器锻炼方法图解全套 臂力器锻炼方法图解
- 花式包子做法大全图解
- 麻将怎么打初学图解108 麻将怎么打初学图解
- 科二坡道起步技巧图解 坡道起步技巧图解
- 史密斯热水器说明书图解?史密斯热水器按键功能图解?