python实现简单redis客户端(3)使用asyncio添加异步支持

使用Python3标准库的asyncio来进行异步连接

import asyncio

@asyncio.coroutine
def create_connection(host,port, loop=None):
    reader, writer = yield from asyncio.open_connection(host, port, loop=loop)
    conn = RedisClient(reader, writer, loop=loop)
    return conn

class RedisClient:
    def __init__(self,reader,writer,loop=None):
        self._reader = reader
        self._writer = writer
        self._loop = loop
    def format_command(self,*tokens, **kwargs):
        cmds = []
        for t in tokens:
            cmds.append("$%s\r\n%s\r\n" % (len(t), t))
        return "*%s\r\n%s" % (len(tokens), "".join(cmds))
    def execute_command(self,cmd,*args,**kwargs):
        command = self.format_command(cmd,*args,**kwargs)
        self._writer.write(command.encode('utf-8'))
        yield from self._writer.drain()
        data = yield from self._reader.read(65536)
        return  data.decode('utf-8')  
    def set(self,key,value):
        result = self.execute_command("SET",key,value)
        return result
    def get(self,key):
        value = self.execute_command("GET",key)
        return value



def main():
    loop = asyncio.get_event_loop()

    @asyncio.coroutine
    def go():
        conn = yield from create_connection('localhost', 6379,loop=loop)

        ok = yield from conn.set('love', '123')

        value = yield from conn.get('love')
        print(value)

    loop.run_until_complete(go())
if __name__ == '__main__':
    main()

效果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值