提升(PEP 3156)Gibson缓存支持

aiogibson的Python项目详细描述


|Build status||Coverage||Latest PyPI version||Number of PyPI downloads||License|

aiogibson是用于访问gibson缓存数据库的库 来自asyncio(pep-3156/tulip)框架。

gibson是一个高效的基于树的内存缓存服务器。 它使用特殊的trie结构,允许 用户使用前缀对多个密钥集执行操作 在最坏的情况下达到相同性能等级的表达式, 一般情况下甚至比常规缓存实现更好 基于哈希表。

从awesomeaioredis库中大量重用的代码。GibsonPoolGibsonConnection,几乎是RedisPoolRedisConnection,所以我强烈建议签出aioredis

安装

确保已编译并运行gibson服务器。最简单的方法 安装aiogibson是通过使用pypi上的包:

pip install aiogibson

示例

importasynciofromaiogibsonimportcreate_gibsonloop=asyncio.get_event_loop()@asyncio.coroutinedefgo():gibson=yield fromcreate_gibson('/tmp/gibson.sock',loop=loop)# set valueyield fromgibson.set(b'foo',b'bar',7)yield fromgibson.set(b'numfoo',100,7)# get valueresult=yield fromgibson.get(b'foo')print(result)# set ttl to the valueyield fromgibson.ttl(b'foo',10)# increment given keyyield fromgibson.inc(b'numfoo')# decrement given keyyield fromgibson.dec(b'numfoo')# lock key from modificationyield fromgibson.lock(b'numfoo')# unlock given keyyield fromgibson.unlock(b'numfoo')# fetch keys with given prefixyield fromgibson.keys(b'foo')# delete valueyield fromgibson.delete(b'foo')loop.run_until_complete(go())

底层数据结构trie允许我们对多个 使用前缀表达式的密钥集:

多命令

importasynciofromaiogibsonimportcreate_gibsonloop=asyncio.get_event_loop()@asyncio.coroutinedefgo():gibson=yield fromcreate_gibson('/tmp/gibson.sock',loop=loop)# set the value for keys verifying the given prefixyield fromgibson.mset(b'fo',b'bar',7)yield fromgibson.mset(b'numfo',100,7)# get the values for keys with given prefixresult=yield fromgibson.mget(b'fo')# set the TTL for keys verifying the given prefixyield fromgibson.mttl(b'fo',10)# increment by one keys verifying the given prefix.yield fromgibson.minc(b'numfo')# decrement by one keys verifying the given prefixyield fromgibson.mdec(b'numfoo')# lock keys with prefix from modificationyield fromgibson.mlock(b'fo')# unlock keys with given prefixyield fromgibson.munlock(b'fo')# delete keys verifying the given prefix.yield fromgibson.mdelete(b'fo')# return list of keys with given prefix ``fo``yield fromgibson.keys(b'fo')# count items for a given prefiinfo=yield fromgibson.stats()loop.run_until_complete(go())

aiogibson使用上下文管理器支持连接池:

连接池示例

importasynciofromaiogibsonimportcreate_poolloop=asyncio.get_event_loop()@asyncio.coroutinedefgo():pool=yield fromcreate_pool('/tmp/gibson.sock',minsize=5,maxsize=10,loop=loop)# using context managerwith(yield frompool)asgibson:yield fromgibson.set('foo','bar')value=yield fromgibson.get('foo')print(value)# NOTE: experimental feature# or without context manageryield frompool.set('foo','bar')resp=yield frompool.get('foo')yield frompool.delete('foo')pool.clear()loop.run_until_complete(go())

此外,您还可以拥有到gibson服务器的简单低级接口:

低级命令

importasynciofromaiogibsonimportcreate_gibsonloop=asyncio.get_event_loop()@asyncio.coroutinedefgo():gibson=yield fromcreate_connection('/tmp/gibson.sock',loop=loop)# set valueyield fromgibson.execute(b'set',b'foo',b'bar',7)# get valueresult=yield fromgibson.execute(b'get',b'foo')print(result)# delete valueyield fromgibson.execute(b'del',b'foo')loop.run_until_complete(go())

要求

许可证

aiogibson是在mit许可下提供的。

更改

0.1.3(2015-02-10)

  • 文档发布于http://aiogibson.readthedocs.org/
  • 添加了等待关闭的终结器;
  • 测试覆盖率提高到99%;
  • 修正了未来取消的错误;
  • 向mget命令添加了限制参数;

0.1.2(2014-10-15)

  • 已将读卡器界面更改为类似于Hiredis;
  • 来自高级接口的大多数方法现在返回future;
  • 连接池,用作高级连接的替代插件;
  • 添加了更多docstrings;

0.1.1(2014-09-06)

  • 改进的协议分析器;
  • 在高级命令中添加了类型检查;
  • 在connection execute命令中添加了对none参数的检查;

0.1.0(2014-08-17)

  • 初始版本;

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

推荐PyPI第三方库


热门话题
java Spring引导,通过POST从InputStream上载文件期间RestTemplate异常   Java小程序在小程序查看器中运行,但不在浏览器中运行   swing如何追踪Java中看似随机的崩溃?   带线程池的多线程Java阶乘计算   java EWS:FindItem请求异常中不支持的限制   java Android studio ListView默认项   Java的字符串。split()删除尾随的空条目   java如何在j2EE应用程序中通过JMS和Websphere MQ发送和接收xml文件   facebook图形api Solrjava错误:class com。restfb。类型。Post声明多个名为type的JSON字段   java Oracle数据库:使用字符(X)或数字(X)代替日期   java如何在saxon中使用DirectoryCollection   oracle我可以脱机“查看”Java标准库吗   java的增量if循环函数在主函数的增量循环中   oracle数字类型的数据库java映射   java读取一个文本文件并写入多个文本文件以进行过滤/提取   java ImageJ无法获取CurrentImage