Redis大通道号性能

时间:2018-06-29 13:49:39

标签: php laravel performance caching redis

我想使用Redis进行缓存。 一个数据集是由许多键构成的。这些键的大小不同。最大的重约20k。 对于用例,最好由那些键的组合组成redis通道键。 这样,如果进行了更新,我可以仅刷新一小部分数据。 存储在通道中的集合越大,我丢失的缓存就越多。

但是我想知道拥有大量渠道是否有不利之处。 如果我仅使用最大的密钥,则大约为2万。 如果我拿另一个键乘以大约15倍。当前,第三个频道可能会将其乘以3,但可能会增加到20或更多。 那就是600万个频道。

使用许多渠道是否会遇到麻烦?

示例: 我正在缓存有关各种车辆的信息。 这样我就可以建立类似的频道:

  1. 汽车,卡车,自行车,...
  2. 蓝色车辆,红色车辆
  3. 蓝色汽车,红色汽车,蓝色卡车,红色卡车,蓝色自行车,红色自行车...
  4. ...

在通过通道冲洗第一个redis结构后,我将“丢失”所有汽车信息或所有卡车信息,依此类推。 通过通道冲洗第二个结构时,我只会丢失所有蓝色车辆信息,即。 最后一个示例只会丢失所有蓝色汽车信息,依此类推。 即使仅包含所有蓝色汽车的渠道也将意味着有很多蓝色汽车。但是在其他结构上,我将不得不重新构建更多的信息。

1 个答案:

答案 0 :(得分:1)

查看文档:

  

SUBSCRIBE频道[channel ...]

     

从2.0.0版本开始可用。

     

时间复杂度:O(N),其中N是要订阅的频道数   

-

  

发布频道消息

     

从2.0.0版本开始可用。

     

时间复杂度:O(N + M),其中N是已订阅的客户端数   接收通道,M是订阅模式的总数   (由任何客户)。

因此,如您所见,订阅的时间复杂度不会随频道数量而增加。但是对于发布确实-线性地。您能负担得起遍历您的频道吗?估计它们的上限,估计您的硬件以及它将运行的其他任务。

或考虑以下替代方法:

使用一个通道并传递一些有关应使缓存的哪个部分无效的信息。可能是位图。例如,第一位是红色,第二位-绿色,N + 1位-汽车,N + 2nd-公共汽车,N + M + 1-新,N + M + 2-使用,等等。在一个类别中设置位意味着OR,在不同类别-AND。位图操作非常快,因此,正确完成操作后,缓存提供程序就不必花太多时间进行解析。如果在Redis方面,您可以建立将消息分发给正确的数据提供者的渠道,那将是理想的。提供商会解析该消息,并获得有关无效部分的说明。