按数据库细分Redis

时间:2012-05-25 20:09:44

标签: redis key time-complexity

默认情况下,Redis配置有16个数据库,编号为0-15。这仅仅是名称间距的一种形式,还是存在按数据库隔离的性能影响?

例如,如果我使用默认数据库(0),并且我有1000万个密钥,那么最佳实践建议使用密钥命令通过通配符模式查找密钥效率低下。但是如果我存储我的主要密钥,也许是8个分段密钥的前4个分段,导致在单独的数据库(比如数据库3)中产生更小的密钥子集。 Redis会将这些视为一组较小的键,还是所有数据库中的所有键都显示为一个巨大的键索引?

在时间复杂度方面,如果我的数据库看起来像这样:

  • 数据库0:10,000,000个密钥
  • 数据库3:10,000键

对数据库3的调用的时间复杂度是 O(10m) 还是 O (10k)

感谢您的时间。

1 个答案:

答案 0 :(得分:6)

Redis为每个数据库都有一个单独的字典。从您的示例中,对数据库3的密钥调用将是O(10K)

尽管如此,使用keys是违反最佳做法的。此外,对同一应用程序使用多个数据库也是最佳做法。如果要迭代密钥,则应以特定于应用程序的方式对其进行索引。 SortedSet是构建索引的好方法。

参考文献:

  1. 结构redisServer的数组为redisDBSee redisServer in redis.h
  2. 每个redisDB都有自己的字典对象。 See redisDB in redis.h
  3. keys命令对当前数据库的字典进行操作