初学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 |
10 | 54.0 |
11 | 55.0 |
12 | 56.0 |
注:类文件是用 javac 编译器产生的.class 文件。
【具体来源】官网:Chapter 4. The class File Format (oracle.com)