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

Ali*_*nau 1 redis

在我目前的项目中,我主动使用redis用于各种目的.当前应用2个redis数据库:

  1. 第一个包含绝对临时数据:有多少用户在线,谁在线,各种管理员的柜台.在启动脚本启动应用程序之前,将清除此数据库.
  2. 第二个数据库用于持久数据,如用户的评级,用户的朋友等.

一切似乎都是正确的,每个人都很开心.

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

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

Jon*_*ler 5

那没有.有一个命令可以轻松地将密钥移动到另一个DB:

http://redis.io/commands/move

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

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

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

我理解这是如何有用的,但遗憾的是我认为Redis的多个数据库错误是我在Redis设计中最糟糕的决定......没有任何实际的好处,它会使内部组件变得更加复杂.实际情况是,数据库由于多种原因而无法很好地扩展,例如密钥和VM的活动过期.如果可以使用字符串执行数据库选择,我可以看到此功能被用作可扩展的O(1)字典层,而不是.

对于DB编号,默认为几个DB,我们更好地沟通了这个功能以及如何使用我认为.我希望在某些时候我们可以放弃多个DB支持,但我认为可能为时已晚,因为有很多人依赖这个功能来完成他们的工作.

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