gpt4 book ai didi

Php Redis 在 Sets 中添加值而不排序

转载 作者:可可西里 更新时间:2023-11-01 11:17:07 24 4
gpt4 key购买 nike

我正在尝试为我的网站构建一个站点地图生成器,因此尝试从我的网站收集链接,然后遍历这些链接以收集找到的更多链接。例如:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$redis->sAdd('myLinks', 'www.example.com');
$redis->sAdd('myLinks', 'www.example.com/1');
$redis->sAdd('myLinks', 'www.example.com/2');
$redis->sAdd('myLinks', 'www.example.com/3');
...

但是当我检查我的设置时

print_r($redis->smembers('myLinks'));

它不会以添加的方式维护值。代码的输出是

Array
(
[0] => www.example.com/7
[1] => www.example.com
[2] => www.example.com/2
[3] => www.example.com/5
[4] => www.example.com/1
[5] => www.example.com/4
[6] => www.example.com/3
[7] => www.example.com/8
[8] => www.example.com/9
[9] => www.example.com/6
[10] => www.example.com/10
)

我想知道是否有任何方法可以像上例中那样从 0 到 10 保持值的位置?

我不想转移到 Redis 列表,因为它们在迭代时真的很慢。

最佳答案

您可以使用 Sorted Set 来实现。每次需要添加链接时,将其添加到 Sorted Set 中,集合的大小为 score (ZCARD)。

ZCARD mylinks
ZADD mylinks result_of_zcard link

通过这种方式,您可以保持这些链接的排序。为了使这些操作成为原子操作,您可以将这两个命令包装到一个 Lua 脚本中。

如果您想按照添加的顺序获取这些链接,只需使用 ZRANGE mylinks 0 -1

如果您需要迭代这些链接,您可以使用ZSCANZRANGE。这两个命令都很快,即 O(1)O(logN)

关于Php Redis 在 Sets 中添加值而不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45006883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com