asyncio (PEP 3156) Gibson缓存支持
项目描述
aiogibson 是一个用于从 gibson 缓存数据库访问的 asyncio (PEP-3156/tulip) 框架的库。
Gibson 是一个高效、基于树的内存缓存服务器。它使用一种特殊的 trie 结构,允许用户使用前缀表达式在多个键集中执行操作,在最坏情况下实现与基于哈希表的常规缓存实现的相同性能等级,在平均情况下甚至更好。
代码大量借鉴了优秀的 aioredis 库。 GibsonPool,GibsonConnection,几乎直接复制了 RedisPool 和 RedisConnection,因此我强烈建议查看 aioredis。
文档
安装
请确保您已编译并运行了 gibson 服务器。安装 aiogibson 的最简单方法是使用 PyPi 上的软件包
pip install aiogibson
示例
import asyncio
from aiogibson import create_gibson
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
gibson = yield from create_gibson('/tmp/gibson.sock', loop=loop)
# set value
yield from gibson.set(b'foo', b'bar', 7)
yield from gibson.set(b'numfoo', 100, 7)
# get value
result = yield from gibson.get(b'foo')
print(result)
# set ttl to the value
yield from gibson.ttl(b'foo', 10)
# increment given key
yield from gibson.inc(b'numfoo')
# decrement given key
yield from gibson.dec(b'numfoo')
# lock key from modification
yield from gibson.lock(b'numfoo')
# unlock given key
yield from gibson.unlock(b'numfoo')
# fetch keys with given prefix
yield from gibson.keys(b'foo')
# delete value
yield from gibson.delete(b'foo')
loop.run_until_complete(go())
底层数据结构 trie 允许我们使用前缀表达式对多个键集进行操作
多命令
import asyncio
from aiogibson import create_gibson
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
gibson = yield from create_gibson('/tmp/gibson.sock', loop=loop)
# set the value for keys verifying the given prefix
yield from gibson.mset(b'fo', b'bar', 7)
yield from gibson.mset(b'numfo', 100, 7)
# get the values for keys with given prefix
result = yield from gibson.mget(b'fo')
# set the TTL for keys verifying the given prefix
yield from gibson.mttl(b'fo', 10)
# increment by one keys verifying the given prefix.
yield from gibson.minc(b'numfo')
# decrement by one keys verifying the given prefix
yield from gibson.mdec(b'numfoo')
# lock keys with prefix from modification
yield from gibson.mlock(b'fo')
# unlock keys with given prefix
yield from gibson.munlock(b'fo')
# delete keys verifying the given prefix.
yield from gibson.mdelete(b'fo')
# return list of keys with given prefix ``fo``
yield from gibson.keys(b'fo')
# count items for a given prefi
info = yield from gibson.stats()
loop.run_until_complete(go())
aiogibson 支持使用上下文管理器进行连接池
连接池示例
import asyncio
from aiogibson import create_pool
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
pool = yield from create_pool('/tmp/gibson.sock', minsize=5, maxsize=10,
loop=loop)
# using context manager
with (yield from pool) as gibson:
yield from gibson.set('foo', 'bar')
value = yield from gibson.get('foo')
print(value)
# NOTE: experimental feature
# or without context manager
yield from pool.set('foo', 'bar')
resp = yield from pool.get('foo')
yield from pool.delete('foo')
pool.clear()
loop.run_until_complete(go())
您还可以获得对 gibson 服务器的简单低级接口
低级命令
import asyncio
from aiogibson import create_gibson
loop = asyncio.get_event_loop()
@asyncio.coroutine
def go():
gibson = yield from create_connection('/tmp/gibson.sock', loop=loop)
# set value
yield from gibson.execute(b'set', b'foo', b'bar', 7)
# get value
result = yield from gibson.execute(b'get', b'foo')
print(result)
# delete value
yield from gibson.execute(b'del', b'foo')
loop.run_until_complete(go())
要求
许可
aiogibson 在 MIT 许可下提供。
变更
0.1.3 (2015-02-10)
添加了等待关闭的终结器;
提高测试覆盖率至99%;
修复了与已取消的未来的bug;
在mget命令中添加了限制参数;
0.1.2 (2014-10-15)
将Reader接口改为与hiredis相似;
高级接口的大部分方法现在返回Future;
连接池,作为高级连接的即插即用替代品;
添加了更多文档字符串;
0.1.1 (2014-09-06)
改进了协议解析器;
在高级命令中添加了类型检查;
在连接执行命令中添加了对None参数的检查;
0.1.0 (2014-08-17)
初始版本;
项目详情
关闭
aiogibson-0.1.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f70c83272ee2193ea7815a875a2391aac50f152ee5ed572a7edcaa66560534a6 |
|
MD5 | 9eefd7219013b29a7fc0e0bd9feea031 |
|
BLAKE2b-256 | c3b3e6eb82732d0051d4b104bcb9987323db399677bd52ddb85663da41593081 |