提升(PEP 3156)Gibson缓存支持
aiogibson的Python项目详细描述
aiogibson是用于访问gibson缓存数据库的库 来自asyncio(pep-3156/tulip)框架。
gibson是一个高效的基于树的内存缓存服务器。 它使用特殊的trie结构,允许 用户使用前缀对多个密钥集执行操作 在最坏的情况下达到相同性能等级的表达式, 一般情况下甚至比常规缓存实现更好 基于哈希表。
从awesomeaioredis库中大量重用的代码。GibsonPool, GibsonConnection,几乎是RedisPool和 RedisConnection,所以我强烈建议签出aioredis。
示例
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)
- 初始版本;