用Rediscachingmongoose对象

是否有可能在Redis中caching(例如)mongoose文档对象,也许是为了实现基于超时caching刷新机制的回写式或直写式caching?

PS:我对mongoose-redis-cache很熟悉,但是我认为它只支持精简查询,这在这里并不完全符合这个目的。 (但我可能是错的)。

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

JSON.stringify(mongooseObject.toJSON()) 

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

开始变得越来越复杂的是,您需要先重写正常的saveupdatefunction,以便将对Redis存储区的修改保存到数据库中。 虽然可行,但Mongoose并不是为此而devise的,而使用本地mongodb驱动程序并以这种方式pipe理一般文档交互可能会更成功。 有一些非常方便的操作符,你需要独立处理(例如$push ,例如,它会向数组添加一个值)。

但真正的问题是,如果所有的数据都没有存储在MongoDB中,那么你将无法使用查询引擎或聚合框架,从而使MongoDB几乎失去了所有的function(即使这样,你仍然绕过你的caching层)。 而且,如果你没有使用任何的function,那么MongoDB可能不是你需要的最佳匹配(你可能会考虑类似CouchDB的东西)。

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

当然,直写式caching会更简单(虽然如果您要信任caching和数据库,您将拥有两个数据存储的复杂性,并确保写入操作始终如一)。

(顺便说一句,我不知道你怎么实际pipe理超时,因为我认为如果redis删除与键相关的值,如果他们被分配一个生命期/超时?我不想松散数据到rediscachingif你正在写回)。