多个redis调用或单个调用Mongo或其他数据库引擎

Jie*_*eng 0 database performance mongodb nosql redis

我知道redis很快,我发现只使用redis就可以实现很多东西.但是以牺牲多个查询为代价.在我使用Mongo时,我可能有一个模型/架构,如:

聊天室(Mongo)

  • _id:ObjectId
  • name:string
  • 用户:数组

有了redis,我需要更复杂的东西

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

要检索mongo的聊天室详细信息很简单,使用mongo我需要在这种情况下产生2个查询.在更复杂的用例中,可能更多

所以我从性能的角度来看,哪个更高效?从开发的角度来看,肯定是以简单的Mongo为例.

Mat*_*zer 5

所以我从性能的角度来看,哪个更高效?从开发的角度来看,肯定是以简单的Mongo为例.

Redis 使用EVAL/EVALSHA命令支持Lua脚本.您称之为多个查询的内容可以简化为其中一个,因为Lua脚本在Redis本身中执行,然后您可以通过SHA从Redis客户端调用缓存的Lua脚本.

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

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

关于Lua脚本

注意Lua脚本是以原子方式执行的,并且由于Redis可以立即执行命令(原子操作就像一个命令),所以不应该在Lua中实现繁重的操作,因为它可能会降低Redis的整体性能.

通常,您实现Lua脚本以原子方式写入数据,例如"设置字符串键,将成员添加到某个集合中,如果从谁知道什么是排序集,则删除".由于您不希望有可能破坏数据,因此使用Lua脚本或MULTI命令来实现原子操作.