0

我是 Redis 的新手,现在我在改进我的 stat 应用程序时遇到了问题。生成统计信息的当前 SQL 在这里:

SELECT MIN(created_at), MAX(created_at) FROM table ORDER BY id DESC limit 10000

它将从字段返回MINMAX值。created_at

我已经阅读了RANGE关于SCORINGRedis 的信息,似乎它们可以用来解决这个问题。但我仍然SCORING对最后 10000 条记录感到困惑。它们可以用来解决这个问题,还是有其他方法可以使用 Redis 来解决这个问题?

问候

4

1 回答 1

0

您的目标似乎有些不清楚 - 您是否希望将所有记录存储在 Redis 中?如果是这样,该table表还有哪些其他列以及您对它运行了哪些其他查询?

我会从表面上回答您的问题,但请注意,在大多数 NoSQL 数据库(包括 Redis)中,您需要根据您计划获取数据的方式来存储数据。假设您想获取最近 10K 记录的最小/最大创建日期,我建议您将它们保存在排序集中。Sorted Set 的成员将是唯一的id,他们的分数将是创建日期(使用 epoch 值),例如,id 为 1、2 和 3 的行分别在日期 10、100 和 1000 创建:

ZADD table 10 1 100 2 1000 3 ...

获得最小的创建日期现在很容易 - 只需要做ZRANGE table 0 0 WITHSCORES- 最大值就在ZRANGE table -1 -1 WITHSCORES咫尺之遥。唯一“棘手”的部分是确保 Sorted Set 保持更新,因此对于每条新记录,您都需要从集合中删除最低的 id 并添加新的。在伪 Python 代码中,这将类似于以下内容:

def updateMinMaxSortedSet(id, date):
    count = redis.zcount('table')
    if count > 10000:
        redis.zrem('table', id-10000)
    redis.zadd('table', id, date)
于 2015-05-01T20:24:28.760 回答