Redis密钥空间通知-订阅服务器数与争用数
我正在尝试使用Redis实现标记。这就是它的样子:Redis密钥空间通知-订阅服务器数与争用数,redis,stackexchange.redis,redis-cluster,Redis,Stackexchange.redis,Redis Cluster,我正在尝试使用Redis实现标记。这就是它的样子: mykey (my item) mykey:tags (a set with the tags associated to that item) tags:tag1 (a set with references to all items tagged with "tag1") ... 我计划使用,以防止过期的密钥永远留在我的标记集上(即使缓存中的每个项都有一个默认的TTL集,我也不喜欢保留过时的数据) 以下是我正在考虑的选项: 1)订阅所有“
mykey (my item)
mykey:tags (a set with the tags associated to that item)
tags:tag1 (a set with references to all items tagged with "tag1")
...
我计划使用,以防止过期的密钥永远留在我的标记集上(即使缓存中的每个项都有一个默认的TTL集,我也不喜欢保留过时的数据)
以下是我正在考虑的选项:
1)订阅所有“过期”事件。
psubscribe '__keyevent@*:expired'
psubscribe '__keyspace@*:mykey'
优点:
- 只有1个订户
- 由于并非所有项目都包含标记,因此我必须检查mykey:标记 如果存在,则获取标记并从每个标记集中删除该项李>
- 此方法上的争用将随着密钥数量的增加而增加 在商店里
psubscribe '__keyevent@*:expired'
psubscribe '__keyspace@*:mykey'
优点:
- 将仅为带有标记的项目创建订阅
- 每个订户都必须有相关的开销李>
- 订阅者的数量可以根据数量快速增长 商店中的标签物品数量
- 数量:我们每天有数千万独立访客。不过,并不是每个访问者缓存中存储的所有项目都有标签。但这是不断变化的
- 标记:管理标记。目前有几十个标签。我们正在考虑将来支持自由文本标签
- 我在这里建议的两种方法我都没有测试过。我希望其中一个选项是如此糟糕,甚至不是一个选项:)
另一个选项可以是@thepirat000建议的选项。我将这个答案标记为可接受的答案,但我也对他的建议做了一些调整:我不想在每个标记操作中对标记进行维护,相反,我可以随机决定何时进行维护。这是一种很好的方法,它既不使用pub/sub,也不使用键空间通知。为此使用键空间通知可能会有太多的开销 为什么不按计划或定期任务进行清理,甚至在通过标记检索密钥时也不进行清理
我做过类似的工作,在检索与标记相关的键时,可以选择运行清理。此外,标记集TTL是它包含的密钥的最大值(TTL)。@RyanVincent你说得对。到目前为止,我所拥有的只是猜测。我希望在我考虑的两个选项之间有一条清晰的道路。使用定期维护任务是我实际找到的一个选项。我不喜欢的是,您必须使用密钥或扫描来循环遍历标记集并删除过期的密钥。我为标记集实现了TTL,正如您所提到的那样;但总有一种可能,旧密钥过期,而新密钥会使设备永远保持活力。。最终你会得到一大堆过期的密钥。我想我很快得出了一个结论,没有检查你的代码。通过传递实际的标签,您不必扫描标签或在标签上键入键。这可能是我可以使用的一个可接受的解决方案。但我不想每次手术都这么做。感谢您的贡献,我们将暂时保持开放状态。