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

文章讨论了初学者在使用Redis时遇到的两个主要问题:一是Redis无法将数据持久化到磁盘,这通常由于强制关闭导致,解决方案包括修改配置和手动触发RDB快照;二是SpringDataRedis集成时的Bean创建错误,需要引入commons-pool依赖并注意Java版本兼容性问题,文中提到将SpringBoot版本降低以适应Java17。
摘要由CSDN通过智能技术生成

初学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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值