

















这是一个创建于 1039 天前的主题,其中的信息可能已经有所发展或是发生改变。
如题 想使用 redis 实现一个均匀使用 ip 的功能,
自己有 10 个代理 ip, 想均匀的使用 ( 轮训着用 一个接着一个 循环往复)
使用过两种方案
1.ip 存为 set 类型 每次使用 srandmember 随机抽取, 但测试发现 非常不随机
2.ip 存为 list 类型 每次 rpoplpush 到同一队列, 这个可以实现完全平均的使用,但有个问题无法解决, 因为可能某一个 ip 某短时间不可以使用, 需要从队列中移除, 但是使用 list 无法移除某一个失效的 ip
想问下大佬们 有什么好的解决方案吗
1 zjp 2023 年 7 月 23 日 via Android失效 IP 比例不高的话,可以方案二 + 再维护一个 set ,命中则再从 list 取一次 |
2 mineralsalt 2023 年 7 月 23 日因为同一个 ip 可以同时执行很多请求, 如果用的时候从列表中移除,挺耽误效率的。 |
3 mineralsalt 2023 年 7 月 23 日针对失效 ip 的问题我是这么解决的,分两块, 第一单独开一个线程定期扫描 ip 库添加可用的 ip 到 set 中。第二用的时候随机取, 但是需要封装统一 http 请求捕获异常,并且把请求超时时间设置的比较短。 当发生任何请求失败时从 redis set 中删除这个 ip , 这样基本上可以保证可用 ip 池都是新鲜可用的, 唯一的缺点就是失败的请求要重新取 ip 重试, 耽误几秒钟 |
4 xuanbg 2023 年 7 月 23 日zset 存 ip ,每次取 score 最小的,然后将这个 ip 的 score+1 |
6 pastgift 2023 年 7 月 23 日list 也可以移除 ip 吧 |
7 pastgift 2023 年 7 月 23 日127.0.0.1:6379> lpush test a |
8 golanggggOP @mineralsalt set 得问题方案 1 说到了, 非随机, 实际调用下来 多的跟少的能差一倍调用量, 另外 就是无法按照 12345678910 这个顺序 轮训使用 所以 不符合我的需求 |
13 mineralsalt 2023 年 7 月 23 日@golangggg #8 那说明你的 ip 池比较小吧, 我 100 多个 ip 感觉还行, 如果强行加锁给每个 ip 都设定权重,就会影响并发效率, 怎么取舍就看你了 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。