• 【Python】使用 Python 中的 aioredis 实现后进先出队列


    引言
    在现代的分布式系统中,使用消息队列是一种常见的方式来实现异步通信和任务处理。Redis 是一种流行的内存数据库,它的列表数据结构非常适合用作消息队列。本文将介绍如何使用 Python 和 aioredis 库来连接 Redis 数据库,并实现一个基于 Redis 的连接池和一个后进先出队列。

    import aioredis
    
    
    class RedisPool:
        _instances = {}
        def __new__(cls, redisURL):
            if redisURL not in cls._instances:
                cls._instances[redisURL] = super().__new__(cls)
                cls._instances[redisURL]._pool = None
                return cls._instances[redisURL]
            else:
                raise cls._instances[redisURL]
    
        def __init__(self, redisURL):
            self._pool = None
            self.redisURL = redisURL
    
        async def get_pool(self):
            if self._pool is None:
                self._pool = await aioredis.from_url(self.redisURL)
            return self._pool
    
    class RedisQueue:
        def __init__(self, redisPool, queueName):
            self._pool = redisPool
            self._queueName = queueName
    
        async def push(self, data):
            pool = await self._pool.get_pool()
            await pool.lpush(self._queueName, data)
    
        async def pop(self):
            pool = await self._pool.get_pool()
            return await pool.lpop(self._queueName)
    
        async def size(self):
            pool = await self._pool.get_pool()
            return await pool.llen(self._queueName)
    
    
    async def main():
        # 带密码的redis redis://:password@localhost:6379/0
        redisPool = RedisPool('redis://:password@233.233.233.233:33333/0')
        queue = RedisQueue(redisPool, 'testQueue')
    
        for i in range(10):
            print(f"push {i}")
            await queue.push(str(i))
        print(f"size {await queue.size()}")
        for i in range(10):
            print(await queue.pop())
        print(f"size {await queue.size()}")
    
    
    if __name__ == '__main__':
        import asyncio
        asyncio.run(main())
    
    • 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
  • 相关阅读:
    集合框架1
    01 Spring 介绍
    【前端】VUE组件操作
    error:Illegal instruction (core dumped),离线下载安装这个other版本numpy
    Python计算机视觉编程 第八章 图像内容分类
    Redis-应用问题(缓存穿透/缓存击穿/缓存雪崩/分布式锁)
    重温FPGA开发35
    ubuntu 扩容逻辑卷
    内存对齐--面试常问问题和笔试常考问题
    Tauri-Vue3桌面端聊天室|tauri+vite3仿微信|tauri聊天程序EXE
  • 原文地址:https://blog.csdn.net/qq_35240081/article/details/136612034