您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    运用 Python 配合 Redis 超越缓存
    时间:2020-07-13 08:05 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    运用 Python 配合 Redis 超越缓存

    假设你是一位 Python 开发者, 那么你一定运用过 Redis , 并且以为它是一个很棒的缓存。 虽然你的印象没有错, Redis 确实是一个很棒的缓存, 但运用 Redis 可以处置的成绩并不只限于缓存。

    我们将探求 Redis 和 Redis Enterprise 的一些其他用途。 为了找点乐子, 我将运用之前《 运用 Redis 贮存天文位置数据 》一文中的大脚怪(Bigfoot)数据。 此外, 由于这篇文章的读者都是 Python 开发者, 所以我将运用 Python 来编写本文的一切代码!

    我在接上去展现的代码中运用了 aioredis 客户端库, 由于它对 async/await 提供了十分棒的支持。 假设你对 async/await 不熟习的话, 那么可以去看看 这篇文章 , 外面提到了 async/await 对提升功用的协助。

    运用 Redis 构建队列

    Redis 提供了字符串、哈希、集合和列表等多种数据结构可供运用。 这些数据结构都是贮存数据的好帮手, 其中列表就可以用作一个十分棒的队列(queue)。

    为了将列表用作队列, 我们需求运用 RPUSH 将新项目推送至列表末尾, 然后运用 LPOP 或许 BLPOP 将它们从列表的前面弹出。 由于 Redis 对数据库的一切修正都是在单个线程外面完成的, 所以这些操作都是原子的。

    作为例子, 下面这段在队列外面添加了一些大脚怪的踪迹。

    import asyncio 

    import aioredis 

     

    async def main(): 

     

      redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf-8'

     

      await asyncio.gather( 

        add_to_queue(redis, 'Possible vocalizations east of Makanda'), 

        add_to_queue(redis, 'Sighting near the Columbia River'), 

        add_to_queue(redis, 'Chased by a tall hairy creature'

      ) 

     

      redis.close() 

      await redis.wait_closed() 

     

    def add_to_queue(redis, message): 

      return redis.rpush('bigfoot:sightings:received', message) 

     

    asyncio.run(main()) 


    import
     asyncio 这个顺序十分直接。 我们只需求在第 18 行调用 redis.rpush , 就可以将指定的元素推入到队列。 接上去是从队列另一端读取元素的代码, 异样十分复杂。

     import aioredis 

     

     from pprint import pp 

     

     async def main(): 

     

       redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf-8'

     

       while True: 

         sighting = await redis.blpop('bigfoot:sightings:received'

         pp(sighting) 

     

     asyncio.run(main()) 


    Redis 还有 一些异样很酷的命令 , 它们不只可以将列表用作队列甚至堆栈。 我最喜欢的是 BRPOPLPUSH , 它可以从列表的右侧阻塞并弹出一些元素, 然后将被弹出的元素推入到另一个列表。 你可以运用这个命令来将一个队列中的元素传递至另一个队列, 这是十分棒的一个命令。第 11 行和第 12 行的有限循环将等候并且打印被推入至队列中的大脚怪踪迹。 这里运用了 redis.blpop 而不是 redis.lpop , 由于前者可以阻塞客户端并等候列表中的元素前往。 比起让 Redis 和 Python 代码之间的网络无休止地轮询并做无用功, 让客户端阻塞并等候元素出现的做法会高效得多。

    运用 Redis 订阅和发送事情

    Redis 提供的东西中有些并不是数据结构, 比如订阅与发布(Pub/Sub)特性就是其中之一。 这个特性就像它的名字一样, 是一个内置于 Redis 中的发布与订阅机制。 得益于这个特性, 我们只需求 运用一些命令 就可以在本人的 Python 运用外面添加弱小的订阅与发布机制。

    经过执行订阅操作可以让我们发现事情, 以下是代码:

    import asyncio 

     import aioredis 

     

     from pprint import pp 

     

     async def main(): 

     

    (责任编辑:admin)