高效异步redis客户端aredis优劣势原理解析
背景
aredis是一款由同步的redis客户端redis-py改写而成的高效的异步redis客户端,在最新的1.0.7版本中完成了对于redis集群的支持。
改动
主要重写了底部建立连接和读取数据部分的代码,接口部分都向下兼容,便于使用者从redis-py的同步代码迁移到async和await的协程版本,详细文档请看aredis文档
使用
安装pipinstallaredis
具体姿势可以参阅项目文档和例子,接口向下兼容redis-py,支持Python3.5及以上版本,在最新的1.0.7版本中也支持rediscluster,并且对于Python3.6还支持各个数据类型的scaniter操作。
一个简单的例子如下所示:
>>>importaredis
>>>importasyncio
>>>r=aredis.StrictRedis(host='localhost',port=6379,db=0)
>>>loop=asyncio.get_event_loop()
>>>asyncdeftest():
>>>awaitr.set('foo','bar')
>>>print(awaitr.get('foo'))
>>>loop.run_until_complete(test())
b'bar'
优势
使用了协程的异步客户端相较于同步客户端来说由于使用了Python的事件循环等多余代码,实际上运行效率是较低的,但是好处在于它不会阻塞你的io,你可以在网络io进行的同时进行别的操作,aredis比较适用于爬虫、http服务器等密集网络io的操作,使得你的代码不用等上redis操作的时间。
而相比于现有的两款支持async/await的redis客户端来说:
aioredis:
aioredis要求装上hiredis,而aredis可以不需要相关依赖地运行,速度上两者持平且都可以使用hiredis来作为parser,用uvloop代替asyncio的eventloop来加速
asyncio_redis:
asyncio_redis使用了Python提供的protocol来进行异步通信,而aredis则使用StreamReader和StreamWriter来进行异步通信,在运行速度上两倍于asyncio_redis,附上benchmark
而且以上两款客户端目前都还没有对于集群的支持,相对来说aredis的功能更为全面一些。
劣势
现在对于编码的支持还不是那么完善,大部分命令还是用bytes类型作为返回值,且目前只支持Python3.5及以上的版本
前排求star和pr0-0
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。