我是Redis的新手,现在我有问题需要改进我的统计应用程序。生成统计信息的当前SQL位于:
SELECT MIN(created_at), MAX(created_at) FROM table ORDER BY id DESC limit 10000
它将从MIN
字段返回MAX
和created_at
值。
我在Redis上看过RANGE
和SCORING
,似乎可以用来解决这个问题。但我仍然对最后10000条记录的SCORING
感到困惑。它们是否可用于解决此问题,还是有其他方法可以使用Redis解决此问题?
此致
答案 0 :(得分:0)
您的目标似乎有点不清楚 - 您是否希望将所有记录存储在Redis中?如果是这样,table
表中有哪些其他列以及您针对它运行了哪些其他查询?
我会从表面上看待你的问题,但请注意,在大多数NoSQL数据库(包括Redis)中,您需要根据计划提取数据来存储数据。假设您想获得最后10K记录的最小/最大创建日期,我建议您将它们保存在排序集中。排序集的成员将是唯一的id
,他们的分数将是创建日期(使用纪元值),例如,带有ID 1,2和&的行。在10,100和10日创建了3个。分别为1000:
ZADD table 10 1 100 2 1000 3 ...
现在很容易获得最小的创建日期 - 只需ZRANGE table 0 0 WITHSCORES
- 并且最大值仅为ZRANGE table -1 -1 WITHSCORES
。唯一“棘手”的部分是确保分类集保持更新,因此对于每个新记录,您需要从集合中删除最低的ID并添加新的ID。在伪Python代码中,这看起来类似于以下内容:
def updateMinMaxSortedSet(id, date):
count = redis.zcount('table')
if count > 10000:
redis.zrem('table', id-10000)
redis.zadd('table', id, date)