如何获取Redis中最后的10个键?

27

假设我有一个包含1,000,000个键的数据库。有没有一种方法可以知道该数据库中最后的10个键是什么?


不好意思,你必须自己实现。 - Tommaso Barbugli
那你会怎么处理这个问题呢? - Siva
你可以将键存储在列表或排序集中。 - Tommaso Barbugli
@Sivapriyan,你能告诉我们更多关于你需要最后10个“keys”的具体情况吗?也许我们可以推荐一个解决方法。正如Tommaso Barbugli所说,为了实现你想要的功能,你需要使用一个次要结构,比如列表或排序集合(速度较慢),以获取最后n个键。 - Eli
1
在“最后的10个键”中,“最后”是什么意思? - akonsu
显示剩余3条评论
4个回答

7
您需要使用以下命令将其作为另一个列表进行维护。
Add new key to the front of the list  
LPUSH last10keys key

Retain only the last 10
LTRIM last10keys 0 9

Get the last keys - will return 10 or less
LRANGE mylist 0 9 

2
作为一种解决方法,如果我不想改变缓存中的任何内容,我会追踪AOF文件以查看最新的更改。

tail -f /var/lib/redis/appendonly.aof

从那里,您可以查看键、值和使用的命令。

1
这需要在配置文件中将appendonly设置为yes。这不是默认设置。 - Zitrax

1

您可以使用管道从Redis数据库中获取最后插入的键或特定键。

以下是我的代码示例:

r = redis.StrictRedis(host='localhost', port= 6379, db =0)
# Day1 hash for 24 hours 
# Key , Field , Value
r.hset("31/8/21", "12am", "/home/user/video1.mp4")
r.hset("31/8/21", "1am", "/home/user/video2.mp4")
r.hset("31/8/21", "2am", "/home/user/video3.mp4")
r.hset("31/8/21", "3am", "/home/user/video4.mp4")
r.hset("31/8/21", "4am", "/home/user/video5.mp4")
.
.
#Created sorted set for all the date hashes into single "date" key
r.sadd("date", "25/8/21")
r.sadd("date", "26/8/21")
r.sadd("date", "27/8/21")
r.sadd("date", "28/8/21")
r.sadd("date", "29/8/21")
r.sadd("date", "30/8/21")
r.sadd("date", "31/8/21")
r.save

@app.get("/lastweek")
def sortweek():
        lastweeklist = r.sort("date", 27, -1, alpha=True) #sorted set key > date
        pipe = r.pipeline()
        for keys in lastweeklist:
                pipe.hgetall(keys) #hvals
        week1 = []
        for week in pipe.execute():
                week1.append(week)
        return week1

0

有些命令带有 [LIMIT offset count] 参数,您可以填写并获取有限数量的项目。

例如 zrevrangebyscore key +inf 0 LIMIT 0 20,它会给您一个排序集合中前20个项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接