为什么在缓存方面要使用Redis而不是MongoDB?

21

最近我看到很多人将Redis用作缓存,为什么不用Mongo呢?就我所知,Redis可以在索引上设置过期日期(类似于memcache),但除此之外,还有其他任何不使用Mongo的理由吗?

我这样问是因为我正在MySQL中进行大型联接,然后在选择后更改数据。 我已经在站点的其他部分中使用了memcache,但在Mongo中保存此数据可以让我对缓存数据进行地理空间搜索。

3个回答

17

许多人确实使用MongoDB作为低中等级缓存,它的效果非常好。

因为它通过特定查询提供了比简单键值存储更多的功能,所以它不像memcache或redis一样是一个纯粹的缓存层(它可能会更慢地插入和检索数据)。

可实现极高的性能(工作集毕竟在RAM中),但数据模型较重。

然而,MongoDB确实提供了一个持久化层,对于最有可能在以后需要的类型的数据来说,这个层对大多数开发者来说更有意义,与Redis不同。


5
MongoDB的其他功能,例如固定集合,也可用于缓存层。此外,还有一个可配置TTL集合的功能请求,它对于缓存层非常有帮助,但尚未实现。 - dcrosta
6
已经实施了 :) - wprl
可配置的TTL集合:https://docs.mongodb.com/manual/tutorial/expire-data/ - Simon B.
现在MongoDB提供了In-Memory存储引擎,非常适合缓存。https://docs.mongodb.com/manual/core/inmemory/#in-memory-storage-engine - Mark

11

MongoDB和Redis最大的区别在于Redis通常将整个数据库存储在内存中。MongoDB使用内存映射文件来模拟所有内容都在内存中,并允许操作系统根据需要将位从磁盘中分页进出内存。如果操作系统可以将所有内容保存在内存中,则性能会相对类似。


1
Redis 保留两份副本,一份在内存中,另一份在磁盘上。 - ToddJCrane
1
从版本3.2开始,WiredTiger是MongoDB的默认存储引擎。 - Jingguo Yao

4

当我们说到缓存时,往往会想到速度。这里的目标是尽可能快地设置和检索某些内容。从这个意义上讲,Redis比MongoDB更快。然而,如果您发现MongoDB适合在缓存数据上进行地理空间搜索,那么使用它也可以。当然,您可以花费一些时间在Redis中实现相同的功能,然后进行基准测试,看看您能获得什么收益。


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