1

在我目前的项目中,我积极地将 redis 用于各种目的。当前应用程序有2 个 redis 数据库

  1. 第一个包含绝对临时数据:有多少用户在线,谁在线,各种管理员计数器。该数据库在应用程序启动之前由启动脚本清除。
  2. 第二个数据库用于持久性数据,如用户评分、用户朋友等。

一切似乎都是正确的,每个人都很高兴。

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

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

4

1 回答 1

5

那没有。有一个命令可以轻松地将密钥移动到另一个数据库:

http://redis.io/commands/move

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

使用多个数据库绝对不是一个好主意:

来自 Salvatore Sanfilippo(redis 的创建者)的一句话:

我知道这很有用,但不幸的是,我认为 Redis 多个数据库错误是我在 Redis 设计中最糟糕的决定……没有任何真正的收获,它使内部结构变得更加复杂。现实情况是,由于多种原因,数据库无法很好地扩展,例如密钥和 VM 的主动过期。如果可以使用字符串执行 DB 选择,我可以看到此功能被用作可扩展的 O(1) 字典层,但事实并非如此。

使用 DB 编号,默认为几个 DB,我们可以更好地沟通此功能是什么以及我认为如何使用。我希望在某个时候我们可以完全放弃对多数据库的支持,但我认为这可能为时已晚,因为有很多人在工作中依赖此功能。

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

于 2012-11-19T15:32:05.623 回答