2

是否可以在 Redis 中缓存 mongoose 文档对象,也许是为了使用基于超时的缓存刷新机制实现回写或直写缓存?

PS:我对mongoose-redis-cache很熟悉,但我猜它只支持精益查询,在这里并不能达到目的。(但我可能错了)。

4

1 回答 1

3

由于 Mongoose 对象包装了一个 MongoDB 文档,所以没有理由不能调用

JSON.stringify(mongooseObject.toJSON())

这将返回一个表示 MongoDB 文档的字符串。( toJSON ) 然后,您可以将该结果存储在 redis 中的键/值中。

开始变得更复杂的地方是,您需要首先覆盖常规saveupdate功能,以将任何修改保存到您的 redis 存储而不是数据库。虽然可行,但 Mongoose 并不是为此而设计的,仅使用本机 mongodb 驱动程序并以这种方式管理一般文档交互可能会更成功。您需要独立处理许多非常方便的运算符($push例如,它将单个值添加到数组中)。

但真正的问题是,如果所有数据尚未存储在 MongoDB 中(即使是,您仍然无法使用查询引擎或聚合框架,您几乎失去了 MongoDB 的所有功能)绕过你的缓存层)。而且,如果您不使用任何该功能,那么 MongoDB 可能不是满足您需求的最佳选择(您可能会考虑使用 CouchDB 之类的东西)。

虽然我可以看到为高性能 MongoDB 系统使用缓存层的潜在价值,但回写式缓存的复杂性可能比它的价值更复杂(而且不一定安全)。

当然,直写式缓存会更简单(尽管您有两个数据存储的复杂性,并且如果您要信任缓存和数据库,请确保一致地提交写入)。

(顺便说一句,我不确定您实际上是如何管理超时的,因为我认为 redis 删除了与键关联的值,如果它们被分配了生命周期/超时?我不想将数据丢失到 redis 缓存如果你在做回写)。

于 2013-08-29T19:59:13.860 回答