跳到主要内容

用 Redis 做资源池

· 4 分钟阅读
月子喵

最近在爬取一些比较感兴趣的的数据, 但是数据接口做了权限校验, 而且做了单端登录(不能同时请求, 同一个token 同一时间只能请求一个, 用的是 Websocket 协议). 比较麻烦. 我各个节点之间用的是 Redis 做的通信, 所以 继续用 Redis 做一个资源池用来分配调用权限

哈欠
Preview

实现

其实是就以下几步

  • Master 节点初始化
    • 拉取数据库保存的爬虫用户信息, 加入到 Redis 缓存
    • 查询是否用户信息是否被占用, 没有占用的话加到 spiderUserPool 队列中
  • Master 节点维护信息
    • 定时检查所有已经使用的 Key 是否已经被释放(检查 lock ), 如果释放了 加入到资源池
  • Cluster 节点使用
    • 弹出资源池资源ID,
    • 校验是否被占用
    • 拉取缓存信息
  • Cluster 节点释放
    • 退出释放锁

缓存数据

加载中.....

获取资源

加载中.....

主动释放

加载中.....

被动释放

加载中.....

如果有更好的办法也可以留言告诉我