在一个命令中使用来自多个redis数据库的数据

时间:2012-11-19 15:28:57

标签: redis

在我目前的项目中,我主动使用redis用于各种目的。当前应用程序有 2个redis数据库

  1. 第一个包含绝对临时数据:有多少用户在线,谁在线,各种管理员的计数器。在应用程序以启动脚本启动之前清除此数据库。
  2. 第二个数据库用于用于持久数据,如用户的评分,用户的朋友等。
  3. 一切似乎都是正确的,每个人都很开心。

    然而,当我开始在我的应用程序中实现新功能时,我发现我需要将一组用户的朋友与一组在线用户相交。这些集存储在不同的redis数据库中,我没有发现在redis中执行此任务的任何可能性,除了更改应用程序体系结构并将所有键移动到一个名称空间(数据库)。

    实际上是否有办法使用来自多个数据库的数据在redis中执行某些命令?或者我的redis用例是错误的,我必须修复系统架构?

1 个答案:

答案 0 :(得分:5)

没有。有一个命令可以很容易地将密钥移动到另一个DB:

http://redis.io/commands/move

如果将所有键移动到一个DB,请确保没有任何键冲突!您可以为临时数据库中的键添加后缀或前缀,以确保无误。如果目标DB中已存在密钥,MOVE将不执行任何操作。因此,请确保您采取'0'回复

使用多个DB绝对不是一个好主意:

来自Salvatore Sanfilippo(redis的创造者)的报价:

  

我理解这是如何有用的,但不幸的是我考虑过   Redis多个数据库错误是Redis设计中最糟糕的决定   所有...没有任何实际收益,它使内部很多   更复杂。现实情况是,数据库不能很好地扩展   理由数量,如密钥和VM的活动过期。如果是DB   可以使用字符串执行选择我可以看到此功能   用作可扩展的O(1)字典层,而不是它。

     

使用DB编号,默认为几个DB,我们是通信   更好的是这个功能是什么,我认为如何使用。我希望   在某些时候,我们可以放弃多个DB支持,但我认为   可能为时已晚,因为有很多人依赖于此   他们的工作特色。

https://groups.google.com/forum/#!msg/redis-db/vS5wX8X4Cjg/8ounBXitG4sJ