Skip to content

RedisClient does not handle DB number in connection URI correctly #19041

@HeyItsBATMAN

Description

@HeyItsBATMAN

What version of Bun is running?

1.2.9

What platform is your computer?

Linux 6.15.0-rc1-1-cachyos-rc x86_64 Arch Linux

What steps can reproduce the bug?

Using the redis-cli, go-redis, node-redis and probably more libraries, when given a Redis connection URI, it is supported to pass the number of the DB the client wants to use at the end of the URI like so:
redis[s]://[[username][:password]@][host][:port][/db-number]

This behaviour does not work in Buns RedisClient.

Example Code:

for (let i = 0; i < 16; i++) {
  const client = new Bun.RedisClient(`redis://localhost:6379/${i}`);
  await client.set("key", JSON.stringify({ value: "Hello, Redis!" }));
  const value = await client.get("key");
  console.log(`DB number in URI: ${i}`, value);
}

Output:

DB number in URI: 0 {"value":"Hello, Redis!"}
DB number in URI: 1 OK
DB number in URI: 2 OK
DB number in URI: 3 OK
DB number in URI: 4 OK
DB number in URI: 5 OK
DB number in URI: 6 OK
DB number in URI: 7 OK
DB number in URI: 8 OK
DB number in URI: 9 OK
DB number in URI: 10 OK
DB number in URI: 11 OK
DB number in URI: 12 OK
DB number in URI: 13 OK
DB number in URI: 14 OK
DB number in URI: 15 OK

What is the expected behavior?

Expected behavior would be to get the correct result for the key, no matter which DB number was passed in the connection URI.

What do you see instead?

Any DB number other than 0 in the connection URI just returns "OK" for any key.

Additional information

Using the SELECT command after initializing the RedisClient works.

for (let i = 0; i < 16; i++) {
  const client = new Bun.RedisClient(`redis://localhost:6379/`);
  await client.send(`select`, [i.toString()]);
  await client.set("key", JSON.stringify({ value: "Hello, Redis!" }));
  const value = await client.get("key");
  console.log(`DB number in select: ${i}`, value);
}
DB number in select: 0 {"value":"Hello, Redis!"}
DB number in select: 1 {"value":"Hello, Redis!"}
DB number in select: 2 {"value":"Hello, Redis!"}
DB number in select: 3 {"value":"Hello, Redis!"}
DB number in select: 4 {"value":"Hello, Redis!"}
DB number in select: 5 {"value":"Hello, Redis!"}
DB number in select: 6 {"value":"Hello, Redis!"}
DB number in select: 7 {"value":"Hello, Redis!"}
DB number in select: 8 {"value":"Hello, Redis!"}
DB number in select: 9 {"value":"Hello, Redis!"}
DB number in select: 10 {"value":"Hello, Redis!"}
DB number in select: 11 {"value":"Hello, Redis!"}
DB number in select: 12 {"value":"Hello, Redis!"}
DB number in select: 13 {"value":"Hello, Redis!"}
DB number in select: 14 {"value":"Hello, Redis!"}
DB number in select: 15 {"value":"Hello, Redis!"}

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingredisSomething to do with `redis` in the "bun" module

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions