我最近看到很多人使用 Redis 作为缓存,为什么不使用 Mongo?据我所知,Redis 可以在索引上设置过期日期,例如 memcache,但除此之外有什么理由不使用 Mongo 吗?
我问,因为我在 MySQL 中进行大型连接,然后在选择数据后更改数据。我已经在站点的其他部分使用了 memcache,但是将它保存在 Mongo 中可以让我对缓存的数据进行地理空间搜索。
我最近看到很多人使用 Redis 作为缓存,为什么不使用 Mongo?据我所知,Redis 可以在索引上设置过期日期,例如 memcache,但除此之外有什么理由不使用 Mongo 吗?
我问,因为我在 MySQL 中进行大型连接,然后在选择数据后更改数据。我已经在站点的其他部分使用了 memcache,但是将它保存在 Mongo 中可以让我对缓存的数据进行地理空间搜索。
很多人确实将 MongoDB 用于中低级缓存,而且效果很好。
因为它通过临时可查询性提供了比简单的键值存储更多的功能,所以它不像 memcache 或 redis 那样纯粹是缓存层(插入和检索数据可能会更慢)。
可以获得极高的性能(工作集毕竟在 RAM 中),但数据模型更重。
然而,另一方面,与 Redis 不同,MongoDB 确实提供了一个持久层,这对于大多数开发人员来说更有意义(对大多数开发人员而言)对于以后最有可能需要的数据类型。
MongoDB 和 Redis 最大的区别在于 Redis 通常将整个数据库存储在内存中。MongoDB 使用内存映射文件来假装所有内容都在内存中,并根据需要让操作系统页面位进出磁盘。如果操作系统可以将所有内容保存在内存中,则性能会有些相似。
当我们说缓存时,会想到速度。这里的目标是尽可能快地设置和检索一些东西。从这个意义上说,redis 比 mongodb 快。但是,如果您发现 mongodb 适合对缓存数据进行地理空间搜索,则可以使用它。您当然可以投入一些时间并在 redis 中实现相同的功能,然后进行基准测试以查看您的收获。