Source

repoze.what.plugins.redis / README

Full commit
-*- restructuredtext -*-

============================
The repoze.what Redis plugin
============================

This is an adapters plugin for `repoze.what <http://what.repoze.org/docs/1.x/>`_

The Redis plugin makes *repoze.what* support sources defined in Redis key-value
databases by providing one group adapter and one permission adapter.

Redis
=====

  `Redis <http://code.google.com/p/redis/>`_ is a key-value database. It is
  similar to memcached but the dataset is not volatile, and values can be strings,
  exactly like in memcached, but also lists and sets with atomic operations
  to push/pop elements.

  In order to be very fast but at the same time persistent the whole dataset
  is taken in memory and from time to time and/or when a number of changes
  to the dataset are performed it is written asynchronously on disk.

The database name is numeric; the default database is **0**.

*repoze.what.plugin.redis* uses database **1** for the group adapter and
database **2** for the permission adapter by default, but it lets a custom name
in the adapter initialization.

Building
--------

To compile the trunk version::

  $ git clone git://github.com/antirez/redis.git
  $ cd redis
  $ make

To update::

  $ git pull && make clean && make

To run the server::

  $ ./redis-server

The Python library is in *./client-libraries/python/*, so you should copy it
into your ``site-packages``, e.g.::

  cp ./client-libraries/python/redis.py your-ve/lib/python2.6/site-packages/

*Note*: The client-libraries directory inside the Redis distribution is
only a temp thing.

Little issues
-------------

* If the client is disconnected after of some time of inactivity --it's
  configured to 300 seconds by default--, and it's called any command then
  it raises a *ConnectionError*. It should be rather managed from the Python driver:

  http://groups.google.com/group/redis-db/browse_thread/thread/2581396a6722d3f9

* The data are synchronously saved. It could be modified the *_save* function
  (in the Redis adapter) for that it been asynchronously saved, or for that
  it been saved only when a number of changes to the dataset are performed.

Use
===

Typical usage:

>>> import redis
>>> from repoze.what.plugins.redis import adapters

>>> group = adapters.RedisGroupAdapter(redis.Redis())
>>> permission = adapters.RedisPermissionAdapter(redis.Redis())