PEP 3156 Implementation of the Redis Protocol.
trollius_redis的Python项目详细描述
(从asyncio-redis端口)
支持
- cpython 2.7、3.3-3.5
- 皮比
- PYPY3
说明
移植到trollius的PEP 3156python事件循环的redis客户端。
这个redis库是 redis服务器。这取决于trollius(与pep 3156兼容的异步)。它 使用开发人员支持Python2和Trollius。
如果您是Asyncio新手,那么签出 the asyncio documentation首先。
为了看到我从那里移植来的最棒的司机,我建议你看看jonathan slenders asyncio-redis。
功能
- 适用于trollius asyncio compatible(pep3156)事件循环
- 除了trollius没有依赖项
- 连接池
- 从Unicode(Python)到字节(在Redis中)的自动转换。
- 字节和str协议。
- 完全测试
- 支持阻止呼叫和事务
- 一些多批量回复的流媒体
- PubSub支持
安装
pip install trollius-redis
文档
在read-the-docs查看文档
连接类
一个trollius_redis.Connection实例将负责连接和 将自动重新连接,在连接断开时使用新传输。 这个连接类还充当^{tt2}的代理$ 实例;协议的任何redis命令都可以在 连接。
importtrolliusfromtrolliusimportFromimporttrollius_redis@trollius.coroutinedefexample():# Create Redis connectionconnection=yieldFrom(trollius_redis.Connection.create(host=u'localhost',port=6379))# Set a keyyieldFrom(connection.set(u'my_key',u'my_value'))# When finished, close the connection.connection.close()if__name__=='__main__':loop=trollius.get_event_loop()loop.run_until_complete(example())
连接池
请求将自动分布在池中的所有连接之间。如果 连接被阻塞是因为-例如-阻塞的rpop,另一个 连接将用于新命令。
importtrolliusfromtrolliusimportFromimporttrollius_redis@trollius.coroutinedefexample():# Create Redis connectionconnection=yieldFrom(trollius_redis.Pool.create(host=u'localhost',port=6379,poolsize=10))# Set a keyyieldFrom(connection.set(u'my_key',u'my_value'))# When finished, close the connection pool.connection.close()
事务处理示例
importtrolliusfromtrolliusimportFromimporttrollius_redis@trollius.coroutinedefexample():# Create Redis connectionconnection=yieldFrom(trollius_redis.Pool.create(host=u'localhost',port=6379,poolsize=10))# Create transactiontransaction=yieldFrom(connection.multi())# Run commands in transaction (they return future objects)f1=yieldFrom(transaction.set(u'key',u'value'))f2=yieldFrom(transaction.set(u'another_key',u'another_value'))# Commit transactionyieldFrom(transaction.execute())# Retrieve resultsresult1=yieldFrom(f1)result2=yieldFrom(f2)# When finished, close the connection pool.connection.close()
建议使用足够大的池大小。连接将被占用 只要有交易在里面进行。
pubsub示例
importtrolliusfromtrolliusimportFromimporttrollius_redis@trollius.coroutinedefexample():# Create connectionconnection=yieldFrom(trollius_redis.Connection.create(host=u'localhost',port=6379))# Create subscriber.subscriber=yieldFrom(connection.start_subscribe())# Subscribe to channel.yieldFrom(subscriber.subscribe([u'our-channel']))# Inside a while loop, wait for incoming events.whileTrue:reply=yieldFrom(subscriber.next_published())print(u'Received: ',repr(reply.value),u'on channel',reply.channel)# When finished, close the connection.connection.close()
lua脚本示例
importtrolliusfromtrolliusimportFromimporttrollius_rediscode= \ u""" local value = redis.call('GET', KEYS[1]) value = tonumber(value) return value * ARGV[1] """@trollius.coroutinedefexample():connection=yieldFrom(trollius_redis.Connection.create(host=u'localhost',port=6379))# Set a keyyieldFrom(connection.set(u'my_key',u'2'))# Register scriptmultiply=yieldFrom(connection.register_script(code))# Run scriptscript_reply=yieldFrom(multiply.run(keys=[u'my_key'],args=[u'5']))result=yieldFrom(script_reply.return_value())print(result)# prints 2 * 5# When finished, close the connection.connection.close()
使用协议类的示例
importtrolliusfromtrolliusimportFromimporttrollius_redis@trollius.coroutinedefexample():loop=trollius.get_event_loop()# Create Redis connectiontransport,protocol=yieldFrom(loop.create_connection(trollius_redis.RedisProtocol,u'localhost',6379))# Set a keyyieldFrom(protocol.set(u'my_key',u'my_value'))# Get a keyresult=yieldFrom(protocol.get(u'my_key'))print(result)# Close transport when finished.transport.close()if__name__=='__main__':trollius.get_event_loop().run_until_complete(example())