我正在尝试将Redis 4生成的RDB文件加载到Redis 5中,但是看不到任何数据。
我只是将RDB文件复制到Redis 5期望的位置(我对它的正确位置进行了两次和三遍检查),启动Redis 5,它的启动没有错误:
27066:C 06 Aug 2019 20:22:34.304 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
27066:C 06 Aug 2019 20:22:34.304 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=27066, just started
27066:C 06 Aug 2019 20:22:34.304 # Configuration loaded
27067:M 06 Aug 2019 20:22:34.306 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.5 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 27067
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
27067:M 06 Aug 2019 20:22:34.307 # Server initialized
27067:M 06 Aug 2019 20:22:34.574 * DB loaded from disk: 0.268 seconds
27067:M 06 Aug 2019 20:22:34.574 * Ready to accept connections
0.26 seconds
实际上表明它确实已加载(或尝试加载)RDB文件。如果没有RDB文件,它将显示0.00 seconds
。
但是没有数据:
$ redis-cli
127.0.0.1:6379> keys *
(empty list or set)
超级奇怪的是,即使我设置了一个键并调用save
,Redis 4中的RDB文件也不会更改:
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> keys *
1) "foo"
127.0.0.1:6379> save
OK
(0.51s)
127.0.0.1:6379> exit
$ ls /var/redis/
total 27M
drwxr-xr-x 2 root root 4.0K Aug 6 20:32 .
drwxr-xr-x 14 root root 4.0K Aug 6 18:40 ..
-rw-r--r-- 1 root root 27M Aug 6 20:32 redis.rdb
当我重新启动Redis时,“ foo”键仍然存在,因此必须将其保存在RDB文件中的某个位置。
Redis 5是否仅忽略由Redis 4创建的RDB文件中的所有数据,并附加其自己的数据? 如果是这样,为什么在启动过程中没有通知它,例如“警告:发现Redis先前版本的RDB文件,忽略...”
编辑
好的,我发现以下语句here:
RDB文件是向前兼容的。较旧的转储文件格式将始终与较新版本的Redis一起使用。
所以它应该起作用。但是为什么不呢?
答案 0 :(得分:1)
您提供的所有信息都表明RDB确实已加载。
但是。根据您的数据,密钥可能存储在不同的逻辑数据库中,KEYS *
仅在默认数据库(0)上运行。相反,请尝试执行INFO
命令并检查“密钥空间”部分,以查看密钥是否存储在不同的逻辑数据库中。