由于python对redis进行连接、增删改查等操作时都是网络IO,可能需要一定时间,因此实现异步操作可提高并发性。

首先需要先安装aioredis模块

pip install aioredis==1.3.1

我在虚拟机中运行redis(前台启动) :

在虚拟机中先查看能否ping通主机:

 

 ping通的话我设置不需要密码就可以访问redis:

czc@czc-VirtualBox:~$ redis-cli
127.0.0.1:6379> config set protected-mode no

接下来在主机通过python代码异步操作redis: 

示例1:

import asyncio
import aioredis


async def execute1(address, password):
    print("开始连接redis:",address)
    # 网络IO操作:创建redis连接
    redis = await aioredis.create_redis(address, password=password)

    # 网络IO操作:在redis中设置哈希值person,内部在设两个键值对
    await redis.hmset_dict("person",{"name1":"cc", "age":19})

    # 网络IO操作:去redis中获取值
    result = await redis.hgetall("person",encoding="utf-8")
    print(result)

    # 网络IO操作:关闭redis连接
    redis.close()

    print("结束连接redis:", address)


async def execute2(address, password):
    print("开始连接redis:",address)
    # 网络IO操作:创建redis连接
    redis = await aioredis.create_redis(address, password=password)

    # 网络IO操作:在redis中设置哈希值person,内部在设两个键值对
    await redis.hmset_dict("person",{"name2":"mm", "age":18})

    # 网络IO操作:去redis中获取值
    result = await redis.hgetall("person",encoding="utf-8")
    print(result)

    # 网络IO操作:关闭redis连接
    redis.close()

    print("结束连接redis:", address)


async def main():
    print("开始执行任务")
    task_list = [
        asyncio.create_task(execute1("redis://192.168.1.173:6379", None)),
        asyncio.create_task(execute2("redis://192.168.1.173:6379", None)),
    ]
    done,pending = await asyncio.wait(task_list, timeout=2)  #timeout表示只等2s,超过2s就不等了
    print(done,pending)


if __name__ == '__main__':
    asyncio.run(main())

结果:

 在虚拟机中查看是否已经存储成功:

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐