此文是第一次搞redis主从小白犯的错,大神能够忽略。记录为了让看到本博文的小白前车可鉴redis
centOs:6.5服务器
redis:2.8.10session
公司现有架构均是单机模式,本文仅先介绍redis单机踩的坑-- 即生产应用redis均是单一实例,一旦实例挂掉功能就会不可用。现公司业务使用了一台实例(业务实例),一台session共享实例(session实例)。架构
现须要对现有架构升级(后续会出整个架构升级的相关博客),先从最简单的redis开始开刀,采用主从复制,启用哨兵监听进行主从切换(后续会有相关详细博客)。spa
已经搭建了主从模式,建立了多个key验证没问题, 很开心ing, 发现须要启用AOF,查看官方文档认为so easy, 因而乎 改改改配置,重启服务,在主节点添加了一个key,主从验证经过, 很是开心ing。资源
【敲黑板,开始挖坑了哈】 此时模拟极端故障,把主从节点都停掉了,开始依次开启服务,发现仅有开启AOF后添加的一个key,泪崩ing。。。。文档
通过屡次尝试,终于找到问题博客
问题解析:redis运行一段时间后 再开启AOF,AOF持久化文件是个空文件,它只会追加开启AOF后的操做记录,开启AOF以前的操做均不会记录,因此我挖坑过程当中,开启AOF后没有对那些旧key作过任何操做,致使没有记录到旧key的操做,全部再次启动时,仅仅恢复了开启AOF后操做的keyio
解决方案:运行了一段时间的redis,才开启AOF必定要记得先对实例进行一次AOF持久化,即持久化一下开启AOF持久化以前的数据软件
由于要把session实例和业务实例作一次数据合并,太懒,不想写脚本作redis数据迁移。。想到了AOF持久化文件,将两个实例的AOF文件作一次合并,而后重启服务不就能够作合库操做了吗?
【敲黑板,开始挖坑了哈】
业务实例的AOF文件内容以下
session实例的AOF文件内容以下:
把session实例AOF文件内容复制到业务实例AOF中,内容以下:
此处文件自己最后还有一个25行的空行, 本人洁癖,很开心的删掉了。
把文件放到服务器替换AOF文件,重启redis服务
报出了AOF损坏的错误
根据提示执行了修复命令,查看修复后的文件和我合并文件,发现最后一条命令自行修复删除了,推断是最后一条命令有问题
问题解析:因为本人把最后的空行删除了,致使AOF检验失败,查看AOF文件格式,推断出那个空行是redis的标识行,专门用来对新命令作追加操做。
解决方案:加上最后一行换行符,实践证实,手--贱是要付出代价的!!!手--贱是要付出代价的!!!手--贱是要付出代价的!!!