Migrating from ioredis with keyv on ApolloServer
Hi, I'm migrating my implementation from ioredis to this package instead. Current implementation looks kinda like:
import Keyv from 'keyv';
import KeyvRedis from '@keyv/redis';
import Redis from 'ioredis';
import { KeyvAdapter } from '@apollo/utils.keyvadapter';
const instances =
config.redis.host?.split(',').map((data) => {
const [host, port] = data.split(':');
return { host, port: Number.parseInt(port) };
});
const createTheCache = () => {
const redis = new Redis.Cluster(instances, {
scaleReads: 'slave',
});
return new Keyv({
store: new KeyvRedis(redis),
namespace: 'my-namespace',
});
};
const server = new ApolloServer({
cache: new KeyvAdapter(createTheCache(), {
disableBatchReads: true,
}),
})
I've tried using createCluster.
import Keyv from 'keyv';
import KeyvRedis from '@keyv/redis';
import { createCluster from 'redis';
import { KeyvAdapter } from '@apollo/utils.keyvadapter';
const instances =
config.redis.host?.split(',').map((data) => {
const [host, port] = data.split(':');
return { host, port: Number.parseInt(port) };
});
const createTheCache = async () => {
const client = createCluster({
rootNodes: instances.map(({ host, port }) => ({
url: `redis://${host}:${port}`
})),
});
client.on('error', (err: any) => { console.log("Fail!", err )});
await client.connect();
const store = new KeyvRedis(client as any);
return new Keyv({
store,
namespace: 'my-namespace',
});
};
const server = new ApolloServer({
cache: new KeyvAdapter(await createTheCache(), {
disableBatchReads: true,
}),
)}
However I'm getting an error
| Error: connect ECONNREFUSED 127.0.0.1:6379
| at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1606:16)
| Emitted 'error' event on Keyv instance at:
| at KeyvRedis.<anonymous> (/var/www/app/node_modules/keyv/src/index.js:60:46)
| at KeyvRedis.emit (node:events:519:28)
| at KeyvRedis.emit (node:domain:488:12)
| at EventEmitter.<anonymous> (/var/www/app/node_modules/@keyv/redis/src/index.js:18:40)
| at EventEmitter.emit (node:events:519:28)
| at EventEmitter.emit (node:domain:488:12)
| at EventEmitter.silentEmit (/var/www/app/node_modules/ioredis/built/Redis.js:482:30)
| at Socket.<anonymous> (/var/www/app/node_modules/ioredis/built/redis/event_handler.js:196:14)
| at Object.onceWrapper (node:events:634:26)
| at Socket.emit (node:events:531:35)
| at Socket.emit (node:domain:488:12)
| at emitErrorNT (node:internal/streams/destroy:169:8)
| at emitErrorCloseNT (node:internal/streams/destroy:128:3)
| at processTicksAndRejections (node:internal/process/task_queues:82:21) {
| errno: -111,
| code: 'ECONNREFUSED',
Has anyone tried migrating from ioredis on apolloServer before, what am I missing?
From the error stack trace it seems like the error is coming from ioredis (and not node-redis).. If you want we can debug this together, just ping me on the redis discord (my handle is @leibale)
This issue has been automatically marked as stale due to inactivity. It will be closed in 30 days if no further activity occurs. If you believe this issue is still relevant, please add a comment to keep it open.
This issue has been automatically closed due to inactivity. If you believe this issue is still relevant, please reopen it or create a new issue with updated information.