MongoDB 是否应该使用 Redis 进行缓存

3
在我的项目中,主要数据库是mongodb,用于缓存的是redis。对于长时间和更复杂的查询,使用redis进行缓存显然更好。
但我在思考是否应该缓存简单的查询,例如根据id查找或者根据其他mongodb索引字段查找?这种类型的索引查找使用redis有意义吗?
还是说应该不缓存这种类型的查询,因为mongodb已经在内部拥有良好的缓存机制?
查询mongodb索引字段会更快,还是查询redis会更快?
1个回答

5
  1. 在Redis中查找肯定更快(因为Redis是键值对形式的)。

  2. MongoDB无法缓存查询结果

MongoDB是一个数据库,无法为您缓存查询结果,因为数据随时可能会改变。所以管理缓存是开发人员的责任。

但是MongoDB也有一些很好的内部机制来利用RAM以获得更好的性能。(有关更多信息,请查看this问题)

  1. 数据库查询代价高昂

当您在MongoDB中执行查询时,将有许多处理过程来查找数据,即使是简单的查询也是如此。但是Redis可以非常快速地找到一个键。因此,很明显您必须使用Redis来保存数据,并仅使用MongoDB进行永久存储和查询

我的建议:

建议将任何高使用率或重查询的结果缓存到Redis、Memcached或其他键值内存存储中。 (每天在数据库/MongoDB中查找一个简单帖子一千次是没有意义的。这只是浪费资源。缓存系统的首要职责是使高使用率的数据更加接近)
同时,你必须有一个良好的“缓存失效”机制来更新Redis中的缓存数据。
我建议使用“写穿”技术来保持Redis中的模型和数据。
希望这可以帮助你。

即使是索引查找,也要通过ID查找文档吗?我以为MongoDB也有一些LRU缓存... - user1955934
根据这个答案:https://dev59.com/UGMm5IYBdhLWcg3wivf7#17534847。我认为如果你确定查询结果将从RAM中提供,那么就没有必要将它们存储在Redis中。但这只是简单的查找(使用id),在其他情况下(当查询较长时),我个人会将它们存储在Redis中(即使数据库足够快,我更喜欢不使用数据库,保持轻量级)。@user1955934 - Amin Shojaei
仅使用非常短的缓存,例如一分钟,这是一个好主意吗?最坏的情况是每小时需要进行60次数据库调用。 - user1955934
没关系,即使是3秒也可以。你应该计算查询总数并看到更大的画面。例如,缓存1000个查询,每个查询每小时调用100次,将节省约99900个Mongo查询每小时。@user1955934 - Amin Shojaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接