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

初学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 命令。

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

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

更多问题:

问题2

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

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

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

有关SpringDataRedis

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

问题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的版本,如下:

【附】各大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)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年12月23日
下一篇 2023年12月23日

相关推荐