gpt4 book ai didi

node.js - 使用 Redis 缓存 Mongoose 对象

转载 作者:IT王子 更新时间:2023-10-29 06:10:14 26 4
gpt4 key购买 nike

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

附言:我熟悉mongoose-redis-cache ,但我猜它只支持精益查询,这并不能完全满足这里的目的。 (但我可能错了)。

最佳答案

由于 Mongoose 对象包装了 MongoDB 文档,因此您没有理由不能调用

JSON.stringify(mongooseObject.toJSON())

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

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

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

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

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

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

关于node.js - 使用 Redis 缓存 Mongoose 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18518201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com