redis,试图找出存储数据的最佳方式,以便以分页方式显示数据

flseospp  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(427)

我有以下问题。
我现在有一个redis数据库,里面有很多密钥,>100k。我想在服务器端分页。
我的研究表明:
我的当前存储基于key->value。你不能在不增加太多复杂性的情况下根据我的研究对键/值进行分页,所以我会放弃这个选项,尽管这是最简单的方法,因为我已经用这种方法存储了所有的数据。否则如果不可能,我只想 keys * ,我可以得到所有的键,然后进行查询以分别读取每个键。但我不知道这是不是最好的办法
将键值存储迁移到排序集并使用zrange。但是。。。数据会稳定吗?我的意思是,任何事情都可能发生,一些新的键被添加,然后就没有意义了,例如,在切换页面时,它会丢失行。我说得对吗?无论如何,在本例中,我考虑使用zcount获取整个长度,然后使用zrange检索分页数据。
我还能做什么?或者你会怎么做?

d7v8vwbk

d7v8vwbk1#

您可以将数据保存为键值对,并使用排序计数器来记录插入的每个键的顺序,即使用单调递增的计数器作为排序集的分数。因此,新添加的键将始终放在末尾。将逻辑 Package 到lua脚本中:

local key = KEYS[1]
local val = ARGV[1]

redis.call("SET", key, val)

local score = redis.call("INCR", "score")

redis.call("ZADD", "pagination", "NX", score, key)

那你可以用 ZRANGE 要进行分页: ZRANGE pagination 0 10

相关问题