使用Redis缓存猫鼬对象

时间:2013-08-29 18:14:09

标签: node.js mongodb caching redis mongoose

是否可以在Redis中缓存,例如,mongoose文档obejcts, 也许是为了实现具有基于超时的缓存刷新机制的回写或直写缓存?

P.S .: 我熟悉mongoose-redis-cache,但我想它只支持精益查询,这在这里并不能完全达到目的。 (但我可能错了)。

1 个答案:

答案 0 :(得分:3)

当Mongoose对象包装MongoDB文档时,没有理由不能调用

JSON.stringify(mongooseObject.toJSON())

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

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

真正的问题是,如果所有数据都没有存储在MongoDB中,你就无法使用查询引擎或聚合框架,你几乎失去了MongoDB的所有功能(即使它是,你也是'仍然绕过你的缓存层)。而且,如果您没有使用任何该功能,那么MongoDB可能不是最符合您需求的(并且您可能会考虑像CouchDB这样的东西)。

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

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

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