PEP 3156 Implementation of the Redis Protocol.

trollius_redis的Python项目详细描述


(从asyncio-redis端口)

Build Status from Travis-CIWheel StatusDocumentation Status

支持

  • 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())

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Spring YAML配置中避开SpEL美元符号?   java Flyway脚本跳过第一个后的第二个Flyway脚本   SwingJava:像JTable一样过滤面板   Java JTabbedPane将订单提升到所选选项卡   java如何水平打印jframe或赋予它打印属性?   java My inflate不显示xml文件,原因是什么?   同步(Singleton.class)和同步(obj)之间的java差异   如何在linux操作系统中使用Java获取服务器时区信息   java抽象方法和重写?   java选择相关对象的前N个元素   java无法计算对象的数量   类L安卓/widget/ImageView中没有字段mMaxWidth   JavaHibernate4.3.0。最终和春季数据JPA 1.4.3。释放