高效異步redis客戶端aredis優(yōu)劣勢(shì)原理解析
背景
aredis 是一款由同步的 redis 客戶端 redis-py 改寫而成的高效的異步 redis 客戶端,在最新的 1.0.7 版本中完成了對(duì)于 redis 集群的支持。
改動(dòng)
主要重寫了底部建立連接和讀取數(shù)據(jù)部分的代碼,接口部分都向下兼容,便于使用者從 redis-py 的同步代碼遷移到 async 和 await 的協(xié)程版本,詳細(xì)文檔請(qǐng)看 aredis 文檔
使用
安裝 pip install aredis
具體姿勢(shì)可以參閱項(xiàng)目文檔和例子,接口向下兼容 redis-py,支持 Python 3.5 及以上版本,在最新的 1.0.7 版本中也支持 redis cluster,并且對(duì)于 Python 3.6 還支持各個(gè)數(shù)據(jù)類型的 scan iter 操作。
一個(gè)簡(jiǎn)單的例子如下所示:
>>> import aredis
>>> import asyncio
>>> r = aredis.StrictRedis(host='localhost', port=6379, db=0)
>>> loop = asyncio.get_event_loop()
>>> async def test():
>>> await r.set('foo', 'bar')
>>> print(await r.get('foo'))
>>> loop.run_until_complete(test())
b'bar'
優(yōu)勢(shì)
使用了協(xié)程的異步客戶端相較于同步客戶端來(lái)說(shuō)由于使用了 Python 的事件循環(huán)等多余代碼,實(shí)際上運(yùn)行效率是較低的,但是好處在于它不會(huì)阻塞你的 io,你可以在網(wǎng)絡(luò) io 進(jìn)行的同時(shí)進(jìn)行別的操作,aredis 比較適用于爬蟲、http 服務(wù)器等密集網(wǎng)絡(luò) io 的操作,使得你的代碼不用等上 redis 操作的時(shí)間。
而相比于現(xiàn)有的兩款支持 async/await 的 redis 客戶端來(lái)說(shuō):
aioredis:
aioredis 要求裝上 hiredis , 而 aredis 可以不需要相關(guān)依賴地運(yùn)行,速度上兩者持平且都可以使用 hiredis 來(lái)作為 parser ,用 uvloop 代替 asyncio 的 eventloop 來(lái)加速
asyncio_redis:
asyncio_redis 使用了 Python 提供的 protocol 來(lái)進(jìn)行異步通信,而 aredis 則使用 StreamReader 和 StreamWriter 來(lái)進(jìn)行異步通信,在運(yùn)行速度上兩倍于 asyncio_redis ,附上 benchmark
而且以上兩款客戶端目前都還沒有對(duì)于集群的支持,相對(duì)來(lái)說(shuō) aredis 的功能更為全面一些。
劣勢(shì)
現(xiàn)在對(duì)于編碼的支持還不是那么完善,大部分命令還是用 bytes 類型作為返回值,且目前只支持 Python 3.5 及以上的版本
前排求 star 和 pr 0- 0
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Redission實(shí)現(xiàn)分布式鎖lock()和tryLock()方法的區(qū)別小結(jié)
Redisson是一種基于Redis的分布式鎖框架,提供了lock()和tryLock()兩種獲取鎖的方法,本文主要介紹了Redission實(shí)現(xiàn)分布式鎖lock()和tryLock()方法的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
Redis報(bào)錯(cuò):無(wú)法連接Redis服務(wù)的解決方法
在Linux系統(tǒng)上運(yùn)行Redis服務(wù)時(shí),有時(shí)會(huì)遇到“無(wú)法連接Redis服務(wù)”的報(bào)錯(cuò),本文就詳細(xì)的介紹一下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
redis防止短信惡意調(diào)用的實(shí)現(xiàn)
本文主要介紹了在場(chǎng)景登錄或注冊(cè)接口中使用短信驗(yàn)證碼時(shí)遇到的惡意調(diào)用問(wèn)題,并通過(guò)使用Redis分布式鎖來(lái)解決,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
Windows安裝Redis并添加本地自啟動(dòng)服務(wù)的實(shí)例詳解
這篇文章主要介紹了Windows安裝Redis并添加本地自啟動(dòng)服務(wù)的實(shí)例詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
redis中opsForList().range()的使用方法詳解
這篇文章主要給大家介紹了關(guān)于redis中opsForList().range()的使用方法,文中通過(guò)實(shí)例代碼以及圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03
Redis RDB快照持久化及寫操作禁止問(wèn)題排查與解決
本文主要介紹了Redis RDB快照持久化及寫操作禁止問(wèn)題排查與解決,由于?stop-writes-on-bgsave-error?選項(xiàng)處于啟用狀態(tài),所以寫操作被禁止,下面就來(lái)介紹一下,感興趣的可以了解一下2025-04-04

