当前位置: 首页 > news >正文

Redis配置了在磁盘上保存 RDB 快照,但目前无法持久化到磁盘

       查看spring boot日志,发现redis报错导致登录失败,redis又又又出问题了

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.] with root causeio.lettuce.core.RedisCommandExecutionException: 
MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.

        这个错误表明 Redis 配置了在磁盘上保存 RDB 快照,但目前无法持久化到磁盘。Redis 因此禁用了所有可能修改数据的命令(因为 stop-writes-on-bgsave-error 选项设置为 yes)。以下是解决此问题的步骤:

如果 Redis 是使用 Docker 部署在服务器中的,以下是针对 Docker 环境的解决方案:

1. 检查容器状态和日志

# 查看所有运行中的容器
docker ps# 查看 Redis 容器日志
docker logs <redis_container_name_or_id>

2. 检查磁盘空间

# 查看宿主机磁盘使用情况
df -h# 查看 Docker 磁盘使用情况
docker system df

3. 进入 Redis 容器执行命令

# 进入 Redis 容器
docker exec -it <redis_container_name_or_id> /bin/bash# 在容器内执行 Redis CLI
redis-cli# 在 Redis CLI 中临时关闭写保护
127.0.0.1:6379> CONFIG SET stop-writes-on-bgsave-error no# 检查配置
127.0.0.1:6379> CONFIG GET dir
127.0.0.1:6379> CONFIG GET dbfilename

4. 清理 Docker 资源

# 删除所有未使用的容器、网络、镜像(悬空)
docker system prune# 删除所有未使用的卷
docker volume prune# 删除所有未使用的镜像(包括被引用的)
docker system prune -a

5. 增加 Redis 容器的存储空间

如果使用 Docker 卷:

# 创建新卷
docker volume create redis_data_new# 运行临时容器迁移数据
docker run --rm -it \-v redis_data_old:/from \-v redis_data_new:/to \alpine ash -c "cd /from && cp -av . /to"

6. 修改持久化配置(推荐)

编辑你的 docker-compose.yml 或启动命令:

services:redis:image: redis:latestcommand: - --save ""  # 禁用 RDB 持久化- --appendonly yes  # 启用 AOF 持久化(可选)volumes:- redis_data:/dataports:- "6379:6379"

或者临时禁用持久化:

docker run -d --name redis \redis:latest \redis-server --save "" --appendonly no

7. 解决权限问题

# 检查卷权限
docker inspect <redis_container_name_or_id> | grep "Source"# 修复宿主机目录权限
sudo chown -R 1000:1000 /path/to/redis/data

8. 增加内存限制(如果需要)

在 docker-compose.yml 中:

services:redis:image: redis:latestdeploy:resources:limits:memory: 2Gsysctls:- vm.overcommit_memory=1

9. 备份和恢复数据

# 创建备份
docker exec <redis_container_name_or_id> redis-cli SAVE# 复制 RDB 文件
docker cp <redis_container_name_or_id>:/data/dump.rdb ./backup.rdb

10. 重启 Redis 容器

docker restart <redis_container_name_or_id>

永久解决方案建议:

  1. 监控磁盘空间:设置磁盘空间监控告警

  2. 调整持久化策略

    • 使用 AOF 代替 RDB

    • 减少 RDB 保存频率

  3. 定期维护

    # 设置定时清理任务
    0 2 * * * docker system prune -af
  4. 使用云存储:将数据目录挂载到云存储卷

验证修复是否成功:

# 在应用容器中测试写入
docker exec -it <app_container_name_or_id> sh
# 在容器内执行 Redis 写入测试
redis-cli SET testkey "hello"
EXIT

        这些步骤应该能解决 Redis 在 Docker 中的持久化问题。如果问题仍然存在,请检查宿主机系统日志(/var/log/syslog 或 journalctl -u docker.service)获取更多信息。

相关文章:

  • 数据结构:递归:自然数之和
  • [Java恶补day14] 56. 合并区间
  • 悟饭游戏厅苹果版(悟饭掌悦)|iOS游戏社区手柄工具
  • 【25.06】fabric进行caliper测试加环境部署
  • Vue-ref 与 props
  • browser-use Agent 日志链路分析
  • 1.1Nodejs和浏览器中的二进制处理
  • linux常用特殊字符
  • vue路由的使用与鉴权
  • 健康管理软件+AI技术:打造健康管理方案
  • CppCon 2014 学习:Return values take a ”closure” walk
  • 安全-JAVA开发-第一天
  • 哪些IT运维工具支持自定义监控项?
  • 网络编程(计算机网络基础)
  • 力扣刷题Day 69:搜索二维矩阵(74)
  • LeetCode刷题 -- 542. 01矩阵 基于 DFS 更新优化的多源最短路径实现
  • WebFuture 系列产品 15.2.4 发布公告
  • 黑马Java面试笔记之 消息中间件篇(Kafka)
  • 【动手学机器学习】第三章模式识别与机器学习经典算法——k 近邻算法
  • 2025年AIR SCI1区TOP,多策略增强蜣螂算法MDBO+实际工程问题,深度解析+性能实测
  • 淘宝的网站怎么做的好处/网推公司干什么的
  • 分类信息网站开发/系统设置友情链接有什么作用
  • 四川门户网站建设/推广网站软文
  • 网页微博登录/吉林网络seo
  • 网站建设专业的公司哪家好/网站建设小程序开发
  • 单位网站建设程序/seo公司推荐