Home > Mobile >  ioredis allowing to create repeated keys
ioredis allowing to create repeated keys

Time:06-07

Trying to LOCK key for a scheduler, but ioredis is allowing me to create multiple keys with same name.

import * as redis from '../redis'

const redCli = redis.get(); // get function that starts ioredis

scheduleJob('my-job', '*/05 * * * * *', async () => {
  const key = await redCli.set('my-key', 'key-value', 'EX', 30); // 30 seconds key lifetime  
  console.log(`KEY: ${key}`); // always log 'OK'

  if (!key) {
  // log error and return. NEVER gets here.
  } 

  // ALSO TRIED:
  if (redCli.exists('my-key')...
  if (await redCli.ttl('my-key')...


  // continue the flow...
});

I create a key with 30 seconds of lifetime. And my scheduler runs every 5 seconds.
When I try to redCli.set() a key that already exists, shouldn't return an ERROR/FALSE? Anything but 'OK'...

CodePudding user response:

Not sure why my attempts didn't work, but I solved this using get

const cachedKey = await redisClient.get('my-key');

if(cachedKey) { 
  // Key Already Exists
}

CodePudding user response:

Like most mutating commands in Redis, the SET command in Redis is an upsert. That's just how Redis works.

From the docs for the SET command:

If key already holds a value, it is overwritten, regardless of its type. Any previous time to live associated with the key is discarded on successful SET operation.

  • Related