Redis的分段按数据库(Segmenting Redis By Database)

2019-09-17 13:05发布

默认情况下,Redis的配置有16个数据库,编号为0-15。 这是简单的名称空间的形式,还是有通过数据库分离的性能影响?

例如,如果我使用默认的数据库(0),我有10个百万个密钥,最佳实践表明,使用该命令来查找通配符模式按键将是无效的。 但是,如果我存储我的主要按键,也许是第4段8个分段密钥,导致按键更小的子集在一个单独的数据库(比如数据库3)。 将Redis的认为这些较小的一组密钥,或做在所有数据库中的所有密钥显示为关键的一个巨大的指数?

更明确地说,在时间复杂性方面,如果我的数据库是这样的:

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

按键的时间复杂度要求对数据库3为O(10M),还是会为O(10K)?

谢谢你的时间。

Answer 1:

Redis的有一个单独的字典每个数据库。 从你的例子,该键调用与数据库3将是O(10K)

也就是说,使用keys是对最佳实践。 此外,使用多个数据库的同一个应用程序是根据最佳做法以及。 如果你想遍历键,你应该在应用程序特定的方式对其进行索引。 将SortedSet是一个很好的方式方法来建立索引。

参考文献:

  1. 结构redisServer具有的阵列redisDB 。 见redisServer在redis.h
  2. 每个redisDB都有自己的字典对象。 见redisDB在redis.h
  3. keys命令的字典为当前数据库操作


文章来源: Segmenting Redis By Database