如何在Redis中访问已删除或过期的密钥的属性?

4nkexdtk  于 2023-06-21  发布在  Redis
关注(0)|答案(1)|浏览(98)

我正在使用Redis keyspace通知来访问我删除和过期的密钥:

const Rsub = createClient({
  url: "redis://localhost",
  password: "mypw",
  username: "default",
});
const Rpub = createClient({
  url: "redis://localhost",
  password: "mypw",
  username: "default",
});

 Rpub.connect();
 Rsub.connect();

  Rpub.configSet("notify-keyspace-events", "Ex");

我可以通过以下方式获取过期的密钥:

Rsub.subscribe('__keyevent@0__:expired', key => console.log(key, 'expired'));

效果很好。然而,对我来说,expried密钥的属性比密钥本身更重要。由于key只是一个随机生成的ID,我希望能够访问key包含的元素。有没有什么方法可以让我找到什么是我删除的关键删除之前或之后的属性?

aor9mmx1

aor9mmx11#

在Redis中,当一个key过期(或被删除)时,原始的key-value数据已经被删除。这意味着一旦一个键过期或被删除,它的值就不能再被检索。
我认为可以实现一个可能但不完美的解决方案,但它会消耗额外的内存。指定到期键时,还可以指定包含属性或值的相应键 原来的钥匙。另外,将此新密钥的过期时间设置为略长于原始密钥。这样,一旦原始密钥过期,您就可以访问此新密钥以获取所需的信息并将其删除。

let key = 'key1'; 
let data = 'data1'; 

Rpub.set(key, data, 'EX', 10); 
Rpub.set(key + ':data', JSON.stringify(data), 'EX', 12);

然后,在过期的密钥订阅上获得该新密钥的数据。

Rsub.subscribe('__keyevent@0__:expired', key => {
  Rpub.get(key + ':data', (err, reply) => {
    if (reply) {
      console.log('Data: ', reply);
      Rpub.del(key + ':data'); 
    }
  });
});

相关问题