gpt4 book ai didi

php - redis大 channel 数性能

转载 作者:可可西里 更新时间:2023-11-01 11:47:22 33 4
gpt4 key购买 nike

我想用redis做缓存。一个数据集由多个键组成。这些键有不同的大小。最大的重约20k。对于用例,最好将这些键的组合组成 redis channel 键。这样,如果进行了更新,我可以只刷新一小部分数据。 channel 中保存的集合越大,我丢失的缓存就越多。

但我想知道拥有大量 channel 是否有任何缺点。如果我单独使用最大的 key ,这大约是 20k。如果我拿另一个乘以大约 15 倍的 key 。第三个 channel 目前可以再次将其乘以 3,但可能会增加到 20 或更多。那就是 600 万个 channel 。

我在使用多个 channel 时会遇到麻烦吗?

例子:我正在缓存有关不同类型车辆的信息。所以我可以制作如下 channel :

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

通过 channel 刷新第一个 redis 结构后,我将“丢失”所有汽车信息或所有卡车信息等。通过 channel 刷新第二个结构后,我只会丢失所有蓝色车辆信息,即。而最后一个例子只会丢失所有蓝色汽车的信息等等。即使是只包含所有蓝色汽车的 channel 也意味着有很多蓝色汽车。但在其他结构上,我会丢失,也就是必须重建更多信息。

最佳答案

查看文档:

SUBSCRIBE channel [channel ...]

Available since 2.0.0.

Time complexity: O(N) where N is the number of channels to subscribe to.

-

PUBLISH channel message

Available since 2.0.0.

Time complexity: O(N+M) where N is the number of clients subscribed to the receiving channel and M is the total number of subscribed patterns (by any client).

因此,如您所见,订阅的时间复杂度与 channel 数无关。但是对于 publish 确实 - 线性。你能负担得起循环播放你的 channel 吗?估计它们的上限,估计您的硬件和它将运行的其他任务。

或者考虑这个替代方案:

使用一个 channel 并传递一些关于缓存的哪一部分应该失效的信息。它可以是位图。例如,第一个位是红色,第二个 - 绿色,N+1st - 汽车,N+2nd - 公共(public)汽车,N+M+1 - 新的,N+M+2 - 使用的,等等。在一个类别中设置位意味着或,在不同的类别 - 和。位图操作非常快,所以如果操作得当,你的缓存提供者应该不会费心去解析它。这将是理想的,如果在 Redis 端你可以创建将消息分发给正确的数据提供者的 channel 。提供者将解析消息并获得有关要使哪一部分无效的说明。

关于php - redis大 channel 数性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51103296/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com