Skip to main content

asyncio (PEP 3156) Gibson cache support

Project description

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

aiogibson is a library for accessing a gibson cache database from the asyncio (PEP-3156/tulip) framework.

Gibson is a high efficiency, tree based memory cache server. It uses a special trie structure allowing the user to perform operations on multiple key sets using a prefix expression achieving the same performance grades in the worst case, even better on an average case then regular cache implementations based on hash tables.

Code heavily reused from awesome aioredis library. GibsonPool, GibsonConnection, almost direct copy of RedisPool and RedisConnection, so I highly recommend to checkout aioredis.

Example

import asyncio
from aiogibson import create_gibson

loop = asyncio.get_event_loop()


@asyncio.coroutine
def go():
    gibson = yield from create_gibson('/tmp/aio.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())

Underlying data structure trie allows us to perform operations on multiple key sets using a prefix expression:

Multi Commands

import asyncio
from aiogibson import create_gibson

loop = asyncio.get_event_loop()


@asyncio.coroutine
def go():
    gibson = yield from create_gibson('/tmp/aio.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 has connection pooling support using context-manager:

Connection Pool Example

import asyncio
from aiogibson import create_pool

loop = asyncio.get_event_loop()

@asyncio.coroutine
def go():
    pool = yield from create_pool('/tmp/aio.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())

Also you can have simple low-level interface to gibson server:

Low Level Commands

import asyncio
from aiogibson import create_gibson

loop = asyncio.get_event_loop()


@asyncio.coroutine
def go():
    gibson = yield from create_connection('/tmp/aio.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())

Requirements

License

The aiogibson is offered under MIT license.

Changes

0.1.2 (2014-10-15)

  • Changed Reader interface to be similar to hiredis;

  • Most methods from high level interface now returns Future;

  • Connection pool, works as drop in replacement to high level connection;

  • added more docstrings;

0.1.1 (2014-09-06)

  • Improved protocol parser;

  • Added type checking in high-level commands;

  • Added check for None arguments in connection execute command;

0.1.0 (2014-08-17)

  • Initial release;

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiogibson-0.1.2.tar.gz (13.4 kB view details)

Uploaded Source

File details

Details for the file aiogibson-0.1.2.tar.gz.

File metadata

  • Download URL: aiogibson-0.1.2.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for aiogibson-0.1.2.tar.gz
Algorithm Hash digest
SHA256 1e22fdd0a2a930bdd593b81fd2ce5bb74bf7ffde1d2ffb405d3012a6f805136a
MD5 eb906f7f08395d706fb80bf91d362e0d
BLAKE2b-256 f26982aaa1bd7cce20f1ed4db413d5aabfdbb6a4c7a785f9707ae79db8e10d6d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page