mongodb - 多次调用 redis 或单次调用 Mongo 或其他数据库引擎

标签 mongodb performance redis database nosql

我知道 Redis 速度很快,而且我发现仅使用 Redis 就可以实现很多事情。但是以进行多个查询为代价。在我使用 Mongo 时,我可能有一个像这样的模型/模式:

聊天室(Mongo)

  • _id: 对象ID
  • 姓名:字符串
  • 用户:数组

对于redis,我需要一些更复杂的东西

  • chatrooms:<<id>>其中id需要手动生成
    • 姓名
  • chatrooms:<<id>>:users存储用户集

检索 mongo 的聊天室详细信息非常简单,在这种情况下,使用 mongo 我需要进行 2 次查询。在更复杂的用例中,可能更多

所以我想知道从性能的角度来看,哪个效率更高?从开发的角度来看,当然,例如使用 Mongo 更简单。

最佳答案

So I wonder from a performance point of view, which is more efficient? From a development point of view, definitely, its simpler to use Mongo for example.

Redis 支持Lua scripting using the EVAL/EVALSHA commands .您所说的多个查询可以简化为其中一个,因为 Lua 脚本在 Redis 本身中执行,然后您可以从 Redis 客户端通过 SHA 调用缓存的 Lua 脚本。

就性能而言,这将取决于您自己的代码,但您可以肯定 Redis 应该击败 Mongo,因为 Redis 是一种内存存储并且它异步持久化到磁盘(实际上它会超时创建快照或基于一些条件)。

关于简单性,没有比使用集合、哈希或列表等数据结构更简单的东西了,但无论如何,简单性是一个主观概念...

关于Lua脚本

注意Lua脚本是原子执行的,由于Redis可以一次执行一条命令(原子操作就像一条命令),所以不要在Lua中实现繁重的操作,因为它可能会降低整体Redis 性能。

通常你会实现 Lua 脚本来自动写入数据,比如“设置一个字符串键,将一个成员添加到某个集合中,如果从谁知道是什么排序集合中删除”。由于您不希望有机会破坏您的数据,因此您可以使用 Lua 脚本或 MULTI命令来实现原子操作。

关于mongodb - 多次调用 redis 或单次调用 Mongo 或其他数据库引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30341963/

相关文章:

node.js - 扩展 Mongoose 模型而不存储所有属性

Mongodb聚合结果缓存

lua - 处理redis中的 float

php - Laravel 5.0 存在 Predis 依赖问题

javascript - 内部有多个插入的异步映射

javascript - 在 Node Express 中导出和导入

mysql - 加入长文本字段

linux - 在 linux 系统上拥有高 pgfree/s 有什么意义?

performance - 检查 Web 应用程序性能的最佳方法

redis - Pub/Sub 和 Redis 集群