Performance 跟进[按数据库分割Redis]
这是一个后续问题。 我最初询问了一个redis实例中不同数据库中redis键操作的时间复杂性。我问这个问题的原因是因为我试图实现一个缓存,其中有x多段密钥,每个密钥可能有y实际数据实例,从而产生xy总密钥 但是,我希望支持对主键的通配符搜索,并且在redis中,似乎唯一实现的对键的通配符查询是keys命令,不鼓励使用该命令。在我看来,将x键放在一个单独的数据库中是一个不错的折衷办法,在这个数据库中,键的数量越少,键的操作性能越好 有人能提出更好的选择吗Performance 跟进[按数据库分割Redis],performance,redis,key,time-complexity,Performance,Redis,Key,Time Complexity,这是一个后续问题。 我最初询问了一个redis实例中不同数据库中redis键操作的时间复杂性。我问这个问题的原因是因为我试图实现一个缓存,其中有x多段密钥,每个密钥可能有y实际数据实例,从而产生xy总密钥 但是,我希望支持对主键的通配符搜索,并且在redis中,似乎唯一实现的对键的通配符查询是keys命令,不鼓励使用该命令。在我看来,将x键放在一个单独的数据库中是一个不错的折衷办法,在这个数据库中,键的数量越少,键的操作性能越好 有人能提出更好的选择吗 谢谢。我仍然认为在Redis中使用密钥是不
谢谢。我仍然认为在Redis中使用密钥是不可伸缩的,不管你能用什么聪明的方案来解决线性复杂性 分区是这种方案之一,在传统的RDBMS中通常使用分区来降低在平面表上进行表扫描的成本。您的想法实际上是将此概念改编为Redis 但与提供此功能的传统RDBMS(Oracle、MySQL等)相比有一个重要区别:Redis是一个单线程事件循环。因此,扫描不能与任何其他活动同时进行(例如,为其他客户端连接提供服务)。当Redis扫描数据时,所有连接都会被阻止 您必须设置大量的分区(即数据库)才能获得良好的性能。大约是全局密钥数的1/1000或1/10000。这就是它不可伸缩的原因:Redis不是为处理如此多的数据库而设计的。您可能会遇到在所有数据库上迭代的内部机制问题。以下是从源代码中提取的列表:
- 自动灰化
- 项目到期管理
- 数据库状态日志记录(每5秒一次)
- 信息命令
- 最大内存管理
有了这样的zset,就可以通过zscore和zrange命令的组合检索必须逐块扫描的密钥范围。结果是要扫描的密钥数量受到限制(由前缀决定),搜索发生在客户端,并且对Redis并发模型很友好。缺点是复杂性(特别是处理项目过期)和网络带宽消耗。我仍然认为使用密钥在Redis中是不可扩展的,不管你能采用什么聪明的方案来解决线性复杂性 分区是这种方案之一,在传统的RDBMS中通常使用分区来降低在平面表上进行表扫描的成本。您的想法实际上是将此概念改编为Redis 但与提供此功能的传统RDBMS(Oracle、MySQL等)相比有一个重要区别:Redis是一个单线程事件循环。因此,扫描不能与任何其他活动同时进行(例如,为其他客户端连接提供服务)。当Redis扫描数据时,所有连接都会被阻止 您必须设置大量的分区(即数据库)才能获得良好的性能。大约是全局密钥数的1/1000或1/10000。这就是它不可伸缩的原因:Redis不是为处理如此多的数据库而设计的。您可能会遇到在所有数据库上迭代的内部机制问题。以下是从源代码中提取的列表:
- 自动灰化
- 项目到期管理
- 数据库状态日志记录(每5秒一次)
- 信息命令
- 最大内存管理