node-cache-manager-ioredis icon indicating copy to clipboard operation
node-cache-manager-ioredis copied to clipboard

ttl option is ignored when constructed with an external redis instance

Open wbk opened this issue 3 years ago • 3 comments

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

wbk avatar Feb 03 '21 05:02 wbk

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.

kodeine avatar Mar 01 '21 04:03 kodeine

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.

natesilva avatar Jun 17 '21 19:06 natesilva

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

Tirke avatar Aug 09 '22 07:08 Tirke