我知道 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/