Redis MISCONF Redis is configured to save RDB snapshots错误解决方法

 更新时间:2026年09月07日 08:48:14   作者:温娉哲  
遇到Redis提示MISCONF错误无法保存RDB快照?本文详细解释原因,并提供设置stop-writes-on-bgsave-error为no、优化vm.overcommit_memory内核参数等方法,快速恢复Redis正常写入

前言

在redis中添加list,字符串类型的键值对之后,redisDeskManager上提示了一些错误信息:

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日志的详细日志信息。

原因

强制关闭Redis快照导致不能持久化。

解决方法

1、将 stop-writes-on-bgsave-error 值

设置为no即可避免这种问题。

如果redis缓存的是非重要数据,对可用性要求不高,可以采用这种方式。有两种修改方式:

  • 命令行修改方式
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
  • 修改redis.conf配置文件,更改后需要重启redis

vim 打开redis.conf文件,使用快捷键匹配模式 /stop-writes-on-bgsave-error 定位到stop-writes-on-bgsave-error 字符串所在位置,将原先设置的yes设置为no。然后重启 redis-cli -h 127.0.0.1 -p 6379 shutdown

2、配置优化

添加以下配置项到 /etc/sysctl.conf 配置文件

 vm.overcommit_memory=1

执行以下命令使其实时生效:

sysctl  vm.overcommit_memory=1

Linux内核会根据参数 vm.overcommit_memory参数的设置决定是否放行。

  • vm.overcommit_memory=1 :直接放行
  • vm.overcommit_memory=0 :则比较 此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap,决定是否放行。
  • vm.overcommit_memory=2 :则会比较 进程所有已分配的虚拟内存加上此次请求分配的虚拟内存和系统当前的空闲物理内存加上swap,决定是否放行。

vm.overcommit_memory 这个参数又是干什么的呢?

  • Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存,将这些不会使用的空闲内存分配给其它程序使用,以提高内存利用率,这种技术叫做Overcommit。
  • 一般情况下,当所有程序都不会用到自己申请的所有内存时,系统不会出问题,但是如果程序随着运行,需要的内存越来越大,在自己申请的大小范围内,不断占用更多内存,直到超出物理内存,当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。
  • 它会选择杀死一些进程(用户态进程,不是内核线程,哪些占用内存越多,运行时间越短的进程越有可能被杀掉),以便释放内存。

3、如果缓存数据丢失也可以接受

可以关闭appendonly

appendonly on

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入理解redis中multi与pipeline

    深入理解redis中multi与pipeline

    pipeline 只是把多个redis指令一起发出去,redis并没有保证这些指定的执行是原子的;multi相当于一个redis的transaction的,保证整个操作的原子性,避免由于中途出错而导致最后产生的数据不一致。本文详细的介绍,感兴趣的可以了解一下
    2021-06-06
  • redis.clients.jedis.exceptions.JedisBusyException无法处理异常的解决方法

    redis.clients.jedis.exceptions.JedisBusyException无法处理异常的解决方法

    redis.clients.jedis.exceptions.JedisBusyException异常通常不是 Jedis客户端直接抛出的标准异常,本文就来介绍一下异常的解决方法,感兴趣的可以了解一下
    2024-05-05
  • redis中hash表内容删除的方法代码

    redis中hash表内容删除的方法代码

    在本篇文章里小编给各位整理了关于redis中hash表内容怎么删除的方法以及技巧代码,需要的朋友们分享下。
    2019-07-07
  • redis执行lua脚本的实现方法

    redis执行lua脚本的实现方法

    redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到redis中执行。本文就介绍了redis执行lua脚本的实现方法,感兴趣的可以了解一下
    2021-11-11
  • 使用Grafana监控Redis的操作方法

    使用Grafana监控Redis的操作方法

    这篇文章主要介绍了使用Grafana监控Redis,号称下一代可视化监控系统,结合SpringBoot使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Redis 跳表(Skip List)原理实现

    Redis 跳表(Skip List)原理实现

    跳表是zset有序集合的底层实现之一,本文主要介绍了Redis 跳表(Skip List)原理实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • 分布式缓存redis使用及说明

    分布式缓存redis使用及说明

    Redis单机存在数据丢失、并发低、故障恢复差和存储容量有限问题,集群部署通过主从、哨兵和分片解决,结合RDB/AOF持久化提升数据安全与恢复能力,实现高可用和扩展性
    2025-07-07
  • Redis集群中节点更换IP后实现恢复集群且保留数据

    Redis集群中节点更换IP后实现恢复集群且保留数据

    本文介绍了如何在Redis集群中更改节点IP地址,并通过修改cluster-config-file文件中的IP地址并重启所有节点,成功恢复集群
    2026-03-03
  • 关于Redis持久化的深入探究

    关于Redis持久化的深入探究

    Redis持久化是将内存中的数据保存到磁盘,以防止数据丢失。Redis提供了两种持久化方式:RDB和AOF,本文将给大家详解介绍Redis持久化,感兴趣的同学可以跟着小编一起来学习
    2023-05-05
  • redis list类型命令的实现

    redis list类型命令的实现

    本文主要介绍了redis list类型命令的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论