Redis cache cluster system in Python
.. image:: https://github.com/fengsp/rc/blob/master/docs/_static/rc.png?raw=true :alt: rc: the redis cache
rc - the redis cache.
For full documentation see
rc.readthedocs.org_.
.. code-block:: bash
$ pip install rc
A minimal cache example looks like this:
.. code-block:: python
from rc import Cachecache = Cache() assert cache.set('key', 'value') assert cache.get('key') == 'value' assert cache.get('foo') is None assert cache.set('list', [1]) assert cache.get('list') == [1]
A cache cluster use a redis cluster as backend:
.. code-block:: python
from rc import CacheClustercache = CacheCluster({ 'cache01': {'host': 'redis-host01'}, 'cache02': {'host': 'redis-host02'}, 'cache03': {'host': 'redis-host03'}, 'cache04': {'host': 'redis-host04', 'db': 1}, })
Cache decorator:
.. code-block:: python
@cache.cache() def load(name, offset): return load_from_database(name, offset)rv = load('name', offset=10)
Batch fetch multiple cache results:
.. code-block:: python
assert cache.get_many('key', 'foo') == ['value', None]for cache decorated function
@cache.cache() def cached_func(param): return param
results = []
with the context manager, the function
is executed and return a promise
with cache.batch_mode(): for i in range(10): results.append(cached_func(i)) for i, rv in enumerate(results): assert rv.value == i
Cache invalidation:
.. code-block:: python
cache.delete('key') # for decorated function cache.invalidate(load, 'name', offset=10)
If you feel anything wrong, feedbacks or pull requests are welcome.