是否可以在Redis中缓存,例如,mongoose文档obejcts, 也许是为了实现具有基于超时的缓存刷新机制的回写或直写缓存?
P.S .: 我熟悉mongoose-redis-cache,但我想它只支持精益查询,这在这里并不能完全达到目的。 (但我可能错了)。
答案 0 :(得分:3)
当Mongoose对象包装MongoDB文档时,没有理由不能调用
JSON.stringify(mongooseObject.toJSON())
将返回表示MongoDB文档的字符串。 (toJSON)然后,您可以将结果存储在redis中的键/值中。
开始变得更复杂的地方是,您需要首先覆盖正常的save
和update
功能,以保存对redis存储而不是数据库的任何修改。尽管可行,Mongoose并非专为此设计,您可能更成功地使用本机mongodb驱动程序并以这种方式管理一般文档交互。您需要独立处理许多非常方便的运算符(例如$push
,这会为数组添加单个值)。
真正的问题是,如果所有数据都没有存储在MongoDB中,你就无法使用查询引擎或聚合框架,你几乎失去了MongoDB的所有功能(即使它是,你也是'仍然绕过你的缓存层)。而且,如果您没有使用任何该功能,那么MongoDB可能不是最符合您需求的(并且您可能会考虑像CouchDB这样的东西)。
虽然我可以看到为高性能MongoDB系统使用缓存层的潜在价值,但是回写式缓存的复杂性可能比它的价值更复杂(并且不一定是安全的)。
当然,直写缓存会更简单(尽管你有两个数据存储的复杂性,并且如果你要信任缓存和数据库,确保写入一致)。
(顺便说一下,我不确定你是如何实际管理超时的,因为我认为redis删除了与密钥相关的值,如果它们被分配了生命周期/超时?我不想将数据丢失到如果您正在回写,请使用redis缓存。)