如何在Redis中将MongoDB文档存储为缓存并按超时刷新

如何在Redis中将MongoDB文档存储为缓存并按超时刷新,第1张

如何在Redis中将MongoDB文档存储为缓存并按超时刷新

您的方法似乎很合理。

要“刷新”文档,请在Redis中保留已排序文档ID的排序集,其得分设置为更新时间戳。定期(例如,每分钟)对该集合进行一次ZRANGE处理,以获取“旧”文件(例如,一个小时前的最新更新),然后对每个ID进行一次GET *** 作,将其写入Mongo,然后删除该文档,来自订购集的ZREM。

*在伪Node.js中 *编辑 未经测试且完全组成的代码示例:

 function updatedocument (document) {      // Do some updates ...      document.title = "Updated post title";      // Store to redis      multi = redis_cli.multi();      multi.set(id, JSON.strinfy(document);      multi.zadd('last_update', time(), id);      multi.exec(), function (err, replies) {          if (err) return next(err);          // document updated successful          return res.status(200).send('OK');      });     }  // call this function periodically, e.g. every minute or so  function flushOlddocuments () {      fromTime = time()-3600;      while (redis_cli.zcount('last_update', '-inf', fromTime) > 0) {          id = redis_cli.zrangebyscore('last_update', '-inf', fromTime, false, 0, 1); // no scores, offset 0, limit 1 -> get the oldest document          redis_cli.watch(id);          Mongo.write(JSON.parse(redis_cli.get(id))); // or something like that          multi = redis_cli.multi();          multi.zrem('last_update', id);          multi.del(id);          multi.exec(), function(err, replies) {   // if the watch fails the exec, no harm done and the document will be flushed in an hour   ...          };      };  }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5007666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存