gpt4 book ai didi

Redis ZRANGEBYSCORE 返回空集

转载 作者:可可西里 更新时间:2023-11-01 11:13:37 24 4
gpt4 key购买 nike

这可能是愚蠢的事情..

在 Redis 控制台中执行此操作

zincrby model 1 20140101
zincrby model 1 20141010
zincrby model 1 20141010

为什么会这样

zrangebyscore model 00000000 99999999 withscores
1) "20140101"
2) "1"
3) "20141010"
4) "2"

但这不是

zrangebyscore model 20140000 20149999 withscores

#> (empty list or set)

最佳答案

ZRANGEBYSCORE 用于查找分数范围,而您正在使用您的成员(在第 3 个片段中)。因为 1, 2 << 20140000, 20149999 你什么也得不到。

在回复一些评论后进行编辑

通常,您需要权衡空间/时间,即增加 RAM 和减少 CPU,反之亦然,这实际上取决于您的性能和数据大小要求。通常我会尝试为每个需要的聚合级别跟踪的模型/事件使用一个排序集。 key 过期很有用,但有时也需要从排序集中手动删除成员。

IIUC,您需要每个模型的每日计数器,因此根据您的初始设计,我的“架构”可能是:

Sorted set key name pattern: <model>:daily
|
+- Member value: <day timestamp at 12AM UTC>
+- Member score: <count>

使用 ZINCRBY 增加今天的点击量:

ZINCRBY <model>:daily 1 <today's timestamp at 12AM UTC>

获取日期的命中:

ZSCORE <model>:daily <date timestamp at 12AM UTC>

注意事项:

  1. 不能使用这种方法轻松地确定日期范围,因为您的分数会保持计数。您基本上需要执行多个 ZSCORE (O(log(N))),遍历范围内的每个日期。
  2. 您可以保留额外的滚动或静态聚合以加快常用范围的访问速度。
  3. 您必须手动“终止”较旧的集合成员以进行内务处理。

另一种允许范围的方法是采用以下方法:

Sorted set key name pattern: <model>:daily
|
+- Member value: <day timestamp at 12AM UTC>:<count>
+- Member score: 0

在这里,您可以使用 ZRANGEBYLEX 来获取日期范围,但由于时间戳和计数是连接在一起的,因此您必须在客户端或使用 Lua 进行一些处理才能获取计数(ZSCORE 将始终返回 0)或者增加它(你不能再使用 ZINCRBY)。

关于Redis ZRANGEBYSCORE 返回空集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193979/

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