python操作redis使zset数据类型支持高并发
import redis
class PriorityQueue(object):
'''
用redis做队列的类
'''
def __init__(self, name):
'''
:param name: 集合名
'''
self.server = redis.Redis(host='localhost',port=6379,db=5)
self.name = name
def qsize(self):
'''
:return:队列长度
'''
return self.server.zcard(self.name)
def push(self, url, score):
'''
:param url: 需要下载页面的详情页url
:param score: 整型时间戳
:return: None
'''
self.server.execute_command('ZADD', self.name, score, url)
def deleteKey(self, key):
self.server.execute_command('DEL', self.name, key)
def pop(self, timeout=0):
'''
:param timeout: 超时时间
:return: 需要下载页面的详情页url
'''
pipe = self.server.pipeline()
pipe.multi()
pipe.zrange(self.name, 0, 0).zremrangebyrank(self.name , 0, 0)
results, count = pipe.execute()
if results:
return results[0].decode('utf-8')