Redis持久化报错及解决方案。

Redis:BGSAVE出错原因分析

  1. redis的持久化方式SAVE 和 BGSAVE
    SAVE 和 BGSAVE 两个命令都会调用 rdbSave 函数,但它们调用的方式各有不同:• SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。• BGSAVE 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。因为 rdbSave 在子进程被调用,所以 Redis 服务器在BGSAVE 执行期间仍然可以继续处理客户端的请求。一般服务器都会用BGSAVE方式做持久化,防止redis主进程被阻塞而无法访问。
  2. BGSAVE报错。
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
    redis在写入过程出现这个报错一般是因为redis做了持久化但是持久化失败所以无法写入,一般都是dump.rdb文件没有权限或者内存不够导致的, BGSAVE 会 fork 出一个子进程,会占用两倍的内存。
  3. 解决方法
    config set stop-writes-on-bgsave-error no
    用上面命令把持久化报错关掉,redis可恢复写的操作。不过这只是忽略了错误,rdb持久化仍然会错误,导致rdb备份失效,解决办法还是要保证服务器的内存要大于redis使用内存的2倍。

猜你喜欢

转载自blog.csdn.net/qq_41980563/article/details/88369214