4

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

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

更明确地说,就时间复杂度而言,如果我的数据库如下所示:

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

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

谢谢你的时间。

4

1 回答 1

7

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

也就是说,使用keys是违反最佳实践的。此外,为同一个应用程序使用多个数据库也违反了最佳实践。如果要遍历键,则应以特定于应用程序的方式对它们进行索引。SortedSet 是构建索引的好方法。

参考 :

  1. 该结构redisServer有一个数组redisDB请参阅 redis.h 中的 redisServer
  2. 每个redisDB都有自己的字典对象。请参阅 redis.h 中的 redisDB
  3. keys命令对当前数据库的字典进行操作
于 2012-05-26T04:40:13.383 回答