MAX() SQL 等价于 Redis
MAX() SQL Equivalent on Redis
我是 Redis 的新手,现在我遇到了改进我的统计应用程序的问题。当前生成统计数据的 SQL 在这里:
SELECT MIN(created_at), MAX(created_at) FROM table ORDER BY id DESC limit 10000
它将 return MIN
和 MAX
来自 created_at
字段的值。
我看过关于Redis的RANGE
和SCORING
,看来它们可以用来解决这个问题。但我仍然对最后 10000 条记录的 SCORING
感到困惑。它们可以用来解决这个问题,还是有其他方法可以使用 Redis 解决这个问题?
此致
您的目标似乎有点不清楚 - 您是否希望将所有记录存储在 Redis 中?如果是这样,table
table 还有哪些其他列?您 运行 反对它的其他查询是什么?
我会从表面上回答你的问题,但请注意,在大多数 NoSQL 数据库(包括 Redis)中,你需要根据你计划如何获取数据来存储数据。假设您想要获取最近 10K 条记录的 min/max 创建日期,我建议您将它们保存在一个 Sorted Set 中。 Sorted Set 的成员将是唯一的 id
,他们的分数将是创建日期(使用纪元值),例如,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
即可。唯一的 "tricky" 部分是确保 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)
我是 Redis 的新手,现在我遇到了改进我的统计应用程序的问题。当前生成统计数据的 SQL 在这里:
SELECT MIN(created_at), MAX(created_at) FROM table ORDER BY id DESC limit 10000
它将 return MIN
和 MAX
来自 created_at
字段的值。
我看过关于Redis的RANGE
和SCORING
,看来它们可以用来解决这个问题。但我仍然对最后 10000 条记录的 SCORING
感到困惑。它们可以用来解决这个问题,还是有其他方法可以使用 Redis 解决这个问题?
此致
您的目标似乎有点不清楚 - 您是否希望将所有记录存储在 Redis 中?如果是这样,table
table 还有哪些其他列?您 运行 反对它的其他查询是什么?
我会从表面上回答你的问题,但请注意,在大多数 NoSQL 数据库(包括 Redis)中,你需要根据你计划如何获取数据来存储数据。假设您想要获取最近 10K 条记录的 min/max 创建日期,我建议您将它们保存在一个 Sorted Set 中。 Sorted Set 的成员将是唯一的 id
,他们的分数将是创建日期(使用纪元值),例如,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
即可。唯一的 "tricky" 部分是确保 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)