返回顶部
首页 > 资讯 > 后端开发 > Python >转载:使用redis+flask维护动态
  • 870
分享到

转载:使用redis+flask维护动态

动态redisflask 2023-01-30 22:01:37 870人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

githu源码地址:https://GitHub.com/Germey/ProxyPool更好的代理池维护:Https://github.com/python3WEBSpider/ProxyPool下面文章的源地址:https://bl

githu源码地址:
https://GitHub.com/Germey/ProxyPool
更好的代理池维护:
Https://github.com/python3WEBSpider/ProxyPool

下面文章的源地址:https://blog.csdn.net/polyhedronx/article/details/81485458

针对代理池中的代理IP可能会重复的问题,提出了一种解决方法,实测可行。 代理IP之所以会重复,和Redis数据库使用的数据结构有很大关系,原程序使用的是列表(list)结构,数据以列表形式存入数据库后是有序但允许重复的,当有新的数据存入时,并不会对数据的重复性进行检查和处理。但Redis不仅有列表结构,常见的Redis数据结构有String、Hash、List、Set(集合)和Sorted Set(有序集合),使用Set和Sorted Set结构就不会出现重复元素。 Set是无序集合,元素无序排列,当有重复元素存入时,数据库是不会发生变化的;Sorted Set是有序集合,有序集合是可排序的,但是它和列表使用索引下标进行排序依据不同的是,它给每个元素设置一个分数(score)作为排序的依据,当存入一个元素时,同时需要存入该元素的分数。 Sorted Set使用起来较复杂,主要是分数分配问题比较难搞,所以这里使用Set代替原程序中的List作为数据库的数据结构,将以下内容代替原来的“db.py”文件中的内容即可: # db.py import redis from proxypool.error import PoolEmptyError from proxypool.setting import HOST, PORT, PASSWord class RedisClient(object): def __init__(self, host=HOST, port=PORT): if PASSWORD: self._db = redis.Redis(host=host, port=port, password=PASSWORD) else: self._db = redis.Redis(host=host, port=port) def get(self, count=1): """ get proxies from redis """ proxies = [] for i in range(count): proxies.append(self._db.spop("proxies")) return proxies def put(self, proxy): """ add proxy to right top """ self._db.sadd("proxies", proxy) def pop(self): """ get proxy from right. """ try: return self._db.spop("proxies").decode('utf-8') except: raise PoolEmptyError @property def queue_len(self): """ get length from queue. """ return self._db.scard("proxies") def flush(self): """ flush db """ self._db.flushall() if __name__ == '__main__': conn = RedisClient() print(conn.pop()) 将数据结构改为Set以后,便不会出现代理池中代理IP重复的问题,但这样做也是有弊端的,因为Set是无序的,所以更新代理池的过程中每次弹出的代理IP也是随机的,这样代理池中的某些代理可能永远也不会被更新,而我们获取代理时采用pop方法得到的也是代理池中随机弹出的代理,该代理有可能是很久没有被更新的已经失效的代理。 总结一下就是使用Set结构可以保证代理池中的代理不会重复,但不能保证调用代理池获取代理时得到的代理是最新的和可用的,而List结构可以保证当前获取的代理是最新的,但代理池中的代理可能会有很大的重复。总之,两种方法都是有利有弊的,当然也可以尝试用有序集合(Sorted Set)构建一种完美的方法了。

 

--结束END--

本文标题: 转载:使用redis+flask维护动态

本文链接: https://lsjlt.com/news/179691.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 转载:使用redis+flask维护动态
    githu源码地址:https://github.com/Germey/ProxyPool更好的代理池维护:https://github.com/Python3WebSpider/ProxyPool下面文章的源地址:https://bl...
    99+
    2023-01-30
    动态 redis flask
  • 国外动态ip服务器租用怎么维护
    国外动态ip服务器租用维护的方法:1、检查服务器的硬件和运行环境,包括温度、湿度、灰尘、电源、消防、监控等,保证服务器的稳定性;2、及时下载更新操作软件和应用程序的安全补丁,保证能及时修复可能出现的漏洞;3、做好防御网络攻击的准备和数据备份...
    99+
    2024-04-02
  • PHP中使用Redis实现动态配置
    随着互联网技术的发展,Web应用程序的复杂度也不断增加,随之带来的是更多的配置选项。为了使应用程序具有更强的灵活性和可配置性,许多开发人员会使用动态配置的方式。在PHP应用程序中使用Redis存储和管理动态配置,是一种非常实用的方式。Red...
    99+
    2023-05-15
    PHP redis 动态配置
  • 如何使用PHP生成动态二维码?
    当今互联网时代,二维码已成为人们日常生活中不可或缺的一部分。为了更好地提高二维码的使用效率和安全性,许多开发者开始使用PHP来生成动态二维码。那么,如何使用PHP生成动态二维码呢?本文将为您详细介绍。 一、安装必要的库 在使用PHP生成动态...
    99+
    2023-09-26
    二维码 path git
  • C++使用宏实现动态库加载
    目录前言一、为什么使用宏1、Windows加载2、Linux加载3、宏加载二、具体实现三、如何使用1、引用头文件2、添加导入宏3、直接调用总结前言 开发的时候,有些项目不能静态链接动...
    99+
    2022-12-16
    C++ 宏 动态库加载 C++动态库加载 C++动态库 C++ 宏 动态库
  • vue3动态加载组件及动态引入组件怎么使用
    本篇内容介绍了“vue3动态加载组件及动态引入组件怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.问题在做一个用vite构建的vu...
    99+
    2023-07-05
  • 如何使用Shell脚本自动化Linux系统维护任务
    这篇文章将为大家详细讲解有关如何使用Shell脚本自动化Linux系统维护任务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。系统管理员通常会使用sehll脚本解决工作中重复的工作,shell...
    99+
    2023-06-28
  • 使用selenium+chromedriver+xpath爬取动态加载信息
    目录安装selenium模块说 明selenium模块的使用selenium 模块的常用方法总 结使用selenium实现动态渲染页面的爬取,selenium是浏览器自动化测试框架,...
    99+
    2024-04-02
  • 使用AJAX怎么动态加载后台数据
    这篇文章将为大家详细讲解有关使用AJAX怎么动态加载后台数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。html代码<select id="select"...
    99+
    2023-06-08
  • 如何使用Python、Linux和Apache创建动态二维码?
    二维码,是一种将信息以图形的形式编码的技术。它可以方便地存储和传输信息,同时保护信息的安全性。在现代社会中,二维码已经被广泛应用于各个领域,如扫码支付、物流追踪、广告宣传等等。在本篇文章中,我们将介绍如何使用Python、Linux和Ap...
    99+
    2023-07-23
    linux apache 二维码
  • MySQL实验--静态行转列->动态行转列->存储过程使用行转列
    概述 今天主要用一个实验来介绍一下在使用行转列的过程及相关实验。下面演示一下。 创建表 这里我用一个比较简单的例子来说明,也是行转列的经典例子,就是学生的成绩三张表:学生表、课程表、成绩表 1、学生表 就简单一点,学生学号...
    99+
    2016-08-19
    MySQL实验--静态行转列->动态行转列->存储过程使用行转列
  • 如何使用PHP7的命名空间和自动加载机制提高代码的可维护性?
    如何使用PHP7的命名空间和自动加载机制提高代码的可维护性在开发大型的PHP应用程序时,使用命名空间和自动加载机制是非常重要的。这些特性可以提高代码的可维护性,并且使得代码更易于理解和复用。本文将介绍如何使用PHP7的命名空间和自动加载机制...
    99+
    2023-10-22
    PHP 命名空间 自动加载机制
  • 怎么使用CSS动态调整旋转半径
    这篇文章将为大家详细讲解有关怎么使用CSS动态调整旋转半径,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码:<!DOCTYPE HTML> <...
    99+
    2024-04-02
  • 如何使用SpringSecurity实现动态加载权限信息
    这篇文章主要介绍了如何使用SpringSecurity实现动态加载权限信息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。①数据库中资源与角色对应关系,以及角色和用户对应关系如...
    99+
    2023-06-22
  • 如何使用selenium+chromedriver+xpath爬取动态加载信息
    这篇文章主要介绍如何使用selenium+chromedriver+xpath爬取动态加载信息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用selenium实现动态渲染页面的爬取,selenium是浏览器自动化测...
    99+
    2023-06-29
  • Redis数据结构的动态字符串sds怎么使用
    本篇内容主要讲解“Redis数据结构的动态字符串sds怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis数据结构的动态字符串sds怎么使用”吧!Redis是用ANSI C语言编写的...
    99+
    2023-06-21
  • Element中如何使用Cascader动态加载省\市\区数据
    这篇文章将为大家详细讲解有关Element中如何使用Cascader动态加载省\市\区数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。element中的cascader...
    99+
    2024-04-02
  • 使用Ajax怎么实现一个动态加载组合框
    这篇文章将为大家详细讲解有关使用Ajax怎么实现一个动态加载组合框,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一  province.jsp<%@ page&nb...
    99+
    2023-06-08
  • C#中如何使用反射和动态加载程序集
    C#中如何使用反射和动态加载程序集引言:在C#中,反射(Reflection)是一种强大的机制,它允许我们在运行时获取和操作程序的元数据,包括类型信息、成员信息等。而动态加载程序集则是通过反射来实现的一种常见应用,并且在一些特定场景中非常有...
    99+
    2023-10-22
    C# 反射 动态加载
  • Android在layout xml中如何使用ViewStub完成动态加载
    这篇文章主要介绍了Android在layout xml中如何使用ViewStub完成动态加载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Layout XML文件常见的两...
    99+
    2023-05-30
    android layout xml
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作