首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Redis缓存猫鼬对象

问用Redis缓存猫鼬对象
EN

Stack Overflow用户
提问于 2013-08-29 18:14:09
回答 2查看 5.8K关注 0票数 2

比如说,在Redis中缓存猫鼬文档是否有可能,可能是为了实现带有基于超时的缓存刷新机制的写或直接缓存?

P.S.:我对猫鼬-红-缓存很熟悉,但我猜它只支持精益查询,这在这里不太符合要求。(但我可能错了)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-29 19:59:13

当猫鼬对象包装一个MongoDB文档时,您没有理由不能调用

代码语言:javascript
复制
JSON.stringify(mongooseObject.toJSON())

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

它开始变得更复杂的地方是,您需要首先重写普通的save和update功能,以保存对redis存储的任何修改,而不是对数据库的修改。虽然是可行的,但Mongoose并不是为此而设计的,您可能会更成功地使用本地mongodb驱动程序并以这种方式管理通用文档交互。您需要独立处理许多非常方便的操作符(例如,$push,它将为数组添加一个值)。

然而,真正的问题是,如果所有数据都没有存储在MongoDB中(即使是这样,您仍然绕过缓存层),您就无法使用查询引擎或聚合框架,从而失去了MongoDB的几乎所有功能。而且,如果您没有使用这些功能,那么MongoDB可能不是满足您的需求的最佳选择(您可以考虑使用类似于CouchDB的功能)。

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

当然,写取缓存会更简单(尽管您有两个数据存储的复杂性,并且如果要信任缓存和DB,确保始终提交写操作)。

(顺便说一句,我不知道您实际上是如何管理超时的,因为我认为redis删除了与键相关的值,如果为它们分配了终生/超时时间?如果您正在进行回写,我不想将数据丢失到redis缓存中。

票数 3
EN

Stack Overflow用户

发布于 2022-08-28 18:46:25

在Redis中,您只能缓存原始的JSON,但是要缓存整个Mongoose.Documents对象,您可以使用my库来处理内存中的Redis和mongoose文档中的缓存结果。如果出现一些相关的更改,它还具有基于事件的逻辑来清除两个缓存。

https://www.npmjs.com/package/speedgoose

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18518201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档