mongodb - MongoDB缓存或不缓存使用Redis
问题描述
在我的项目中,主数据库是 mongodb,对于缓存,我有 redis。现在对于较长且更复杂的查询,我使用 redis 来缓存它们显然更好。
但我想知道我是否应该缓存简单的查询,如按 id 查找,或按其他一些 mongodb 索引字段查找?使用 redis 进行这种索引查找是否有意义?
还是我不应该缓存这种查询,因为 mongodb 内部已经有很好的缓存机制?
查找 mongodb 索引字段更快还是查找 redis 更快?
解决方案
在 Redis 中查找肯定更快(因为 Redis 的键值性质)。
MongoDB 无法缓存查询的结果:
MongoDB 是一个数据库,无法为您缓存查询结果,因为数据可能随时更改。所以管理缓存是 Developer 的职责。
而且 MongoDB 也有一些很好的内部机制来使用 RAM 以获得更好的性能。(查看此问题了解更多信息)
- 数据库查询很昂贵:
当您在 MongoDB 中执行查询时,将有许多进程来查找数据,即使是简单的查询。但是 Redis 可以非常非常快地找到密钥。所以很明显,你必须使用Redis 来保存东西,而使用MongoDB 只用于永久存储和查询。
我的建议:
建议将任何高使用率或繁重查询的结果缓存在 Redis、Memcached 或其他键值对内存存储中。(每天在 Database/MongoDB 中查找一个简单的帖子一千次是没有意义的。这只是在浪费资源。缓存系统的首要任务是保持高使用率的数据更接近)
还要注意你必须有一个好的“缓存失效”机制来更新 Redis 中的缓存数据。
我建议使用直写技术将模型和数据保存在 Redis 中。
我希望这有帮助。
推荐阅读
- python - 从python中的SQLITE表中删除第一行
- perforce - 有没有一种简单的方法可以让 perforce “自动”确保两个文件,在不同的路径下,总是包含相同的内容?
- powerbi - PowerBI 和过滤总和计算
- objective-c - ObjectiveC 项目中的 SwiftUI - 列表在预览中工作,而不是在运行时工作
- c++ - 选择 4 个随机数 printf
- angular - 如何在不使用 Promise 的情况下通过 HTTP 检索数据
- android - Flutter - 来自firebase的readData()导致该方法被调用为null
- latex - 如何在 Rmarkdown beamer 演示文稿中拥有多个笔记页面
- java - 我如何能够确定一个字符串是否只包含一个数字?
- python - updating a label value on the GUI which gets updated value from temperature sensor all the time