0

我有以下问题。

我目前有一个包含密钥的 redis 数据库,其中很多,> 100k。我想在服务器端对其进行分页。

我的研究向我展示了以下内容:

  1. 我当前的存储基于 key -> value 。你不能在不增加太多复杂性的情况下根据我的研究对键/值进行分页,所以我会放弃这个选项,尽管这将是最简单的方法,因为我已经以这种方式存储了所有数据。否则,如果不可能,我只想获取keys *,我可以获取所有键,然后进行查询以分别读取每个键。但我不知道这是否是最好的方法
  2. 将键值存储迁移到排序集并使用 ZRANGE。但是……那个数据会稳定吗?我的意思是任何事情都可能发生,并且添加了一些新键然后它就没有意义了,例如在切换页面时它会丢失行。我对吗?无论如何,在这种情况下,我正在考虑使用 ZCOUNT 获取整个长度,然后使用 ZRANGE 检索分页数据。

我还可以做些什么?或者你会怎么做?

4

1 回答 1

2

您可以将数据保存为键值对,并使用 sorted 来记录插入的每个键的顺序,即使用单调递增的计数器作为排序集的分数。这样新添加的键将始终放在最后。将逻辑包装到 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

于 2020-11-11T10:43:37.943 回答