import asyncio import hiredis d = {} def process(req): cmd = req[0].lower() if cmd==b'set': d[req[1]] = req[2] return b"+OK\r\n" elif cmd==b'get': v = d.get(req[1]) if v is None: return b'$-1\r\n' else: return b'$1\r\n1\r\n' else: print(cmd) raise NotImplemented() class RedisServer(asyncio.Protocol): def __init__(self): self.reader = hiredis.Reader() def connection_made(self, transport): self.transport = transport def data_received(self, data): transport = self.transport reader = self.reader reader.feed(data) req = reader.gets() while req != False: transport.write(process(req)) req = reader.gets() loop = asyncio.get_event_loop() coro = loop.create_server(RedisServer, '127.0.0.1', 3001) server = loop.run_until_complete(coro) print('serving on {}'.format(server.sockets[0].getsockname())) try: loop.run_forever() except KeyboardInterrupt: print("exit") finally: server.close() loop.close()