forked from Largefreedom/python_zeroing-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRedis_client.py
94 lines (74 loc) · 2.62 KB
/
Redis_client.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import random
import redis
REDIS_HOST ='Localhost'
REDIS_PORT = 6379
REDIS_KEY = 'proxies'
#初始的分数
INITIAL_SCORE = 10
#最小分数
MIN_SCORE = 0
#最大分数
MAX_SCORE = 100
class Redisclient:
def __init__(self,host =REDIS_HOST,port =REDIS_PORT):
self.redisdb =redis.StrictRedis(host,port)
def add(self,proxy,score =INITIAL_SCORE):
'''
proxy若没有添加到redis数据库中,
利用redisdb.zadd函数进行添加;
'''
if not self.redisdb.zscore(REDIS_KEY,proxy):
print('保存代理', proxy, '成功!')
return self.redisdb.zadd(REDIS_KEY,score,proxy)
def get_proxy(self):
#利用zrangebyscore函数REDIS_KEY进行排序;
res =self.redisdb.zrangebyscore(REDIS_KEY,MAX_SCORE,MAX_SCORE)
if len(res):
proxy = random.choice(res)
print('正在获取代理:',proxy)
else:
'''
redis中没有分数为100的代理,
利用zrevrange函数对REDIS_KEY进行从大到小排序,取前10个代理中的一个;
'''
if self.redisdb.zrevrange(REDIS_KEY,0,10):
proxy = random.choice(self.redisdb.zrevrange(REDIS_KEY,0,10))
else:
print('获取代理出错,ERROR')
raise Exception
return proxy
#删除无用代理;
def decrease_proxy(self,proxy):
'''
模块目的删除redis数据库中无用代理;
,获取代理分数,若不可用,降10分,
若为0分时,代理直接删除;
'''
score = self.redisdb.zscore(REDIS_KEY,proxy)
if score > MIN_SCORE:
print('代理',proxy,'当前分数',score,'减10')
self.redisdb.zincrby(REDIS_KEY,proxy,-10)
else:
print('代理', proxy, '当前分数', score, '移除')
self.redisdb.zrem(REDIS_KEY,proxy)
def exist_proxy(self,proxy):
score = self.redisdb.zscore(REDIS_KEY,proxy)
if score:
return True
else:
return False
def max(self,proxy):
'''
检测到代理可用,直接将分数设置为100;
'''
print('代理',proxy,'可用','设置为',MAX_SCORE)
self.redisdb.zadd(REDIS_KEY,MAX_SCORE,proxy)
def get_count_proxy(self):
#获取redis数据库中的代理数量;
return self.redisdb.zcard(REDIS_KEY)
def get_all_prpxy(self):
'''
获取全部代理;;
:return:
'''
return self.redisdb.zrangebyscore(REDIS_KEY,MIN_SCORE,MAX_SCORE)