redis: ReplyError: ERR DB 索引超出范围

7 redis docker redis-server

我使用 Docker 运行 redis,如下所示:

docker run  --rm -p '6379:6379' -v "$redis_data_dir:/data" --name my_redis_server -d redis redis-server --appendonly 'yes'
Run Code Online (Sandbox Code Playgroud)

过去这工作正常,但现在我收到此错误:

{ ReplyError: ERR DB index is out of range
    at parseError (/root/interos/repos/ntrs-cli/node_modules/redis-parser/lib/parser.js:179:12)
    at parseType (/root/interos/repos/ntrs-cli/node_modules/redis-parser/lib/parser.js:302:14)
Run Code Online (Sandbox Code Playgroud)

命令: { name: 'select', args: [ '20127' ] } }

看起来它正在尝试连接到 db 20127,我确信它是这四个之一:

const client_db0 = new Redis(`redis://${conf["platform-build.public-dns"]}:6379/0`);
const client_db1 = new Redis(`redis://${conf["platform-build.public-dns"]}:6379/1`);
const client_db2 = new Redis(`redis://${conf["platform-build.public-dns"]}:6379/2`);
const client_db3 = new Redis(`redis://${conf["platform-build.public-dns"]}:6379/3`);
Run Code Online (Sandbox Code Playgroud)

那么有什么方法可以启动redis并告诉它添加更多数据库吗?就像是:

docker run  .... redis redis-server --appendonly 'yes' --db-count=16
Run Code Online (Sandbox Code Playgroud)

Иго*_*ков 10

在文件etc/redis/redis.conf 更改行中databases 16(默认情况下有 16 个),很可能您需要超过 16 个

默认情况下,每个数据库索引负责8个或10个数据库(不记得了),所以默认情况下你只使用2个索引(0和1)


tad*_*man 3

SELECT命令用于选择您正在使用的数据库。20127远远超出了您配置的限制 16。

要么更改databases/etc/redis.conf更高的值(对于 20K 等非常大的值来说这可能不是一个好主意),要么选择 0..15 范围内的值。

如果您不确定 20127 来自哪里,请在原始代码或配置中追踪它。