Redis:ReplyError:ERR DB索引超出范围。

7

我使用Docker来运行Redis:

docker run  --rm -p '6379:6379' -v "$redis_data_dir:/data" --name my_redis_server -d redis redis-server --appendonly 'yes'

过去这个可以正常运行,但现在我遇到了这个错误:

{ 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)

command: { name: 'select', args: [ '20127' ] } }

看起来它正在尝试连接到数据库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`);

有没有一种方法可以启动Redis并告诉它添加更多的数据库?就像这样:

docker run  .... redis redis-server --appendonly 'yes' --db-count=16
4个回答

9
在文件 etc/redis/redis.conf 中,修改行 databases 16(默认为16),很可能需要更多于16个数据库。
默认情况下,每个DB索引负责8或10个数据库(不记得具体数值了),因此默认情况下您仅使用了2个索引(0和1)。

3

SELECT 命令用于选择你要使用的数据库。20127 远超过你配置的 16 的限制。

你可以在 /etc/redis.conf 文件中将 databases 修改为更高的值,但对于非常大的值(如 20k),这可能是个坏主意,或者你可以选择在范围 0..15 中选择一个值。

如果你不确定 20127 来自何处,请在源代码或配置文件中进行跟踪。


1
由于我这里有额外的空格,所以出现了这种情况:
 'platform-build.public-dns': ' 127.0.0.1'

也许可以改进解析器?


通常情况下,配置工具不会修剪多余的空格,因此输入垃圾信息将得到垃圾输出。 - tadman
可能会抛出解析错误,而不是完全误解它。 - user11810894

0
当我停止我的Docker环境并执行时,
docker volume prune

错误 ERR DB 索引超出范围 (Redis::CommandError) 消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接