node-cache-manager-ioredis
node-cache-manager-ioredis copied to clipboard
ttl option is ignored when constructed with an external redis instance
Example
Source
const cacheManager = require('cache-manager');
const redisStore = require('cache-manager-ioredis');
const Redis = require('ioredis');
const redis = new Redis();
const cache = cacheManager.caching({
store: redisStore,
redisInstance: redis,
ttl: 123
});
async function test() {
await cache.set('foo', 'bar');
console.log(await cache.ttl('foo'));
}
test().then(process.exit);
Output (Actual)
-1
Output (Expected)
123
Even if i set the TTL to 10 it does not expire. I had to set it like below to make it work.
cacheManager.caching({
store: redisStore,
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
password: process.env.REDIS_PASSWORD,
db: 0,
ttl: +process.env.REDIS_TTL || 10,
});
await REDIS_CACHE.set(`key`, value, 10); // setting it here does not work.
We're seeing the same issue. As a workaround, we were able to set a default cache value like this for cluster mode:
var redisCache = cacheManager.caching({
store: redisStore,
clusterConfig: {
… (various config settings) …
options: {
ttl: 600
}
}
});
For non-cluster mode you'd add an options
object to the redisInstance
value instead of clusterConfig
.
But ultimately I hope this gets fixed. We would prefer to set the TTL at the top level so it remains compatible with other cache stores.
Did a rewrite of this package with top level ttl used by external Redis instance here: https://www.npmjs.com/package/@tirke/node-cache-manager-ioredis