python3.7 redis队列类实现

# -*- coding: utf-8 -*-
import logging
from typing import List
logger = logging.getLogger(__name__)

class BaseQueue(object):
    def __init__(self,redis_cli, name):
        self.redis_cli = redis_cli
        self.name = name

    async def items(self):
        return await self.redis_cli.lrange(self.name, 0, -1)

    async def push(self, *value, force: bool = True):
        if force:
            await self.redis_cli.lpush(self.name, *value)
        else:
            values = await self.items()
            new_value = [i for i in value if bytes(i, encoding="utf8") not in values]
            if new_value:
                await self.redis_cli.lpush(self.name, *new_value)

    async def pop(self):
        return await self.redis_cli.rpop(self.name)

    async def remove(self, value):
        await self.redis_cli.lrem(self.name, 0, value)

    async def has(self, value) -> bool:
        s = await self.items()
        return True if s and value in s else False

class MaintainQueue(BaseQueue):
    def __init__(self, redis_cli):
        super(MaintainQueue, self).__init__(redis_cli, 'proxy:job:maintain')

    async def add_job(self, data):
        await self.push(data)

class MaintainQueueManager(object):
    def __init__(self, redis_cli):
        self.host_queue = BaseQueue(redis_cli, 'maintain:host')
        self.job_queue = MaintainQueue(redis_cli)

class JobQueue(BaseQueue):
    def __init__(self, redis_cli, name):
        self.redis_cli = redis_cli
        self.__key__ = name
        self.queue_prefix = "proxy:job:general:"
        super(JobQueue, self).__init__(redis_cli, f"{self.queue_prefix}{name}")



class JobQueueManager(object):
    def __init__(self, redis_cli):
        self.redis_cli = redis_cli
        self.queue_prefix = "proxy:job:general:"

    async def queues(self) -> List[JobQueue]:
        return [JobQueue(self.redis_cli, i.decode().split(self.queue_prefix)[1]) \
                async for i in self.redis_cli.scan_iter(match=f"{self.queue_prefix}*")]

    async def add_job(self, key, value):
        await JobQueue(self.redis_cli, key).push(value)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值