相关推荐recommended
【Redis】MISCONF Redis is configured to save RDB snapshots, but currently not able to persist on disk.
作者:mmseoamin日期:2024-02-24

初学Redis遇到的问题: 

问题1

MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk.

【解释】这里指出, “Redis原被设置为保存其数据库的快照,但它现在不能持久化到磁盘上了。”

RDB是Redis用来进行持久化的一种方式,是把当前内存中的数据集快照写入磁盘,也就是 Snapshot 快照(数据库中所有键值对数据)。恢复时是将快照文件直接读到内存里。

为什么不能持久化呢?一般是因为强制关闭redis 导致的快照无法持久化。

【暂时解决】进入客户端命令行,输入以下指令:

config set stop-writes-on-bgsave-error no

手动触发Redis进行RDB持久化的命令有两种:

  1、save

  该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。但显然该命令对于内存比较大的实例会造成长时间阻塞,这是致命的缺陷,为了解决此问题,Redis提供了第二种方式。

  2、bgsave

  执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。

  基本上 Redis 内部所有的RDB操作都是采用 bgsave 命令。

所以这样只是暂时的麻痹程序,暂停关注正在进行的错误。

【Redis】MISCONF Redis is configured to save RDB snapshots, but currently not able to persist on disk.,第1张

【真正解决】在etc/sysctl.conf文件中插入此句(与内存有关的原因):

【Redis】MISCONF Redis is configured to save RDB snapshots, but currently not able to persist on disk.,第2张

【Redis】MISCONF Redis is configured to save RDB snapshots, but currently not able to persist on disk.,第3张

更多问题:

问题2

Error creating bean with name 'redisConnectionFactory' defined in class path resource 
java.lang.IllegalStateException: Failed to load ApplicationContext

 进行SpringDataRedis的引入时,在pom文件中:

除了引入SpringDataRedis的依赖,还需要引入commons-pool的依赖。

【Redis】MISCONF Redis is configured to save RDB snapshots, but currently not able to persist on disk.,第4张

有关SpringDataRedis

(其实是SpringData+Redis,所以要先学SpringBoot等,再来学Redis这种NoSQL数据库):

【Redis】MISCONF Redis is configured to save RDB snapshots, but currently not able to persist on disk.,第5张

问题3

无法访问org.springboot.boot.SpringApplication
错误的类文件: /D:/MAVEN/apache-maven-3.8.4/repository/org/springframework/boot/spring-boot/3.0.3/spring-boot-3.0.3.jar!/org/springframework/boot/SpringApplication.class
类文件具有错误的版本 61.0, 应为 52.0
请删除该文件或确保该文件位于正确的类路径子目录中。

 同样也是pom文件中的问题,由于我选取的是java17,而他指出类文件不对,则是java的版本问题(java17为61.0,java8为52.0),因为此前我这个starter依赖是3.0以上的版本,而要改为2.0的版本,如下:

【Redis】MISCONF Redis is configured to save RDB snapshots, but currently not able to persist on disk.,第6张

【附】各大JDK版本与类文件版本对应关系如下:

JDK版本类文件版本(一般都指Major)
8(1.8)52.0
9(1.9)53.0
1054.0
1155.0
1256.0

注:类文件是用 javac 编译器产生的.class 文件。

【具体来源】官网:Chapter 4. The class File Format (oracle.com)