Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lethain/Redis-Python-Datastructures
simple python datastructure wrappings for redis
https://github.com/lethain/Redis-Python-Datastructures
Last synced: 13 days ago
JSON representation
simple python datastructure wrappings for redis
- Host: GitHub
- URL: https://github.com/lethain/Redis-Python-Datastructures
- Owner: lethain
- License: mit
- Created: 2010-09-04T19:00:11.000Z (about 14 years ago)
- Default Branch: master
- Last Pushed: 2021-06-26T23:48:40.000Z (over 3 years ago)
- Last Synced: 2024-08-01T22:56:43.467Z (3 months ago)
- Language: Python
- Homepage:
- Size: 150 KB
- Stars: 105
- Watchers: 5
- Forks: 24
- Open Issues: 1
-
Metadata Files:
- Readme: README.markdown
- License: LICENSE
Awesome Lists containing this project
README
[redis]: http://code.google.com/p/redis/ "Redis"
[redis-py]: http://github.com/andymccurdy/redis-py "Redis-Py"*If you'd like to be a contributor, send me a note! I'd be more than glad to pass this over to a more active maintainer.*
This package exposes [Redis][redis] backed datastructures which bring together
standard Python syntax with persistent in-memory storage. Redis operations
are all atomic as well, meaning that a thoughtful approach can use them
concurrently on multiple machines.Utimately, a trivial wrapper around [Redis-Py][redis-py].
## Simple Installation
The simplest approach to installation is:
pip install redis
pip install -e git+https://github.com/lethain/Redis-Python-Datastructures.git#egg=redis_ds## Installation for development
For development, you should checkout the repository,
and install it into a [virtualenv](http://www.virtualenv.org/en/latest/):# get the code
git clone https://github.com/lethain/Redis-Python-Datastructures.git
cd Redis-Python-Datastructures.git# create and activate a virtualenv if you don't have one already
virtualenv env
. ./activate# install it
pip install -r requirements.txt
python setup.py develop## Running tests
With some embarassment, the tests currently run against local Redis using keys
prefixed with "test_rds.", and taking great pains not to delete any other keys,
so if you have a toy Redis node, the tests will not cause any harm, but you really
shouldn't run the tests against a Redis node you care deeply about.Run them via:
python src/redis_ds/tests.py
The tests really ought to be run against a mocked out version of Redis, but that
work hasn't been done yet.# Usage
This section covers how to use this library to interface with Redis.
## Dictionary via Redis Strings
Using the entire Redis cluster as a dictionary:
>>> from redis_ds.redis_dict import RedisDict
>>> x = RedisDict()
>>> x
{}
>>> x['a'] = 100
>>> x
{'a': '100'}
>>> x['a']
'100'
>>> x['b']
>>> len(x)
1## Dictionaries via Redis Hashes
Using Redis hashes we can store multiple dictionaries in
one Redis server.>>> from redis_ds.redis_hash_dict import RedisHashDict
>>> x = RedisHashDict("some_hash_key")
>>> x
{}
>>> x['a'] = 100
>>> x
{'a': '100'}
>>> x['a']
'100'
>>> x['b']
>>> len(x)
1## Lists via Redis Lists
We also have a kind-of-sort-off implementation of a list which
certainly doesn't have the full flexibility of a Python list,
but is persistent, synchronized and sharable.>>> from redis_ds.redis_list import RedisList
>>> x = RedisList("my-list")
>>> x
RedisList([])
>>> x.append("a")
1
>>> x.append("b")
2
>>> x
RedisList(['a', 'b'])
>>> x[0]
'a'
>>> x.pop()
'b'
>>> x
RedisList(['a'])It also provides access to blocking versions of pop, which
with a little creativity you can use to create a message queue
with workers.>>> x.pop(blocking=True)
'a'Woohoo.
## Sets
Sets are also available thanks to work by [@hhuuggoo](https://github.com/hhuuggoo):
>>> from redis_ds.redis_set import RedisSet
>>> x = RedisSet()
>>> x.add("a")
>>> x.add("a")
>>> x.add("b")
>>> x.add("b")
>>> len(x)
2
>>> 'a' in x
True
>>> 'c' in x
False
>>> x.pop()
'a'
>>> len(x)
1## Serializing Values Stored in Redis
Thanks to work by [@hhuuggoo](https://github.com/hhuuggoo), this library also
supports serializing values before storing them in Redis. Each class has a
serialized equivalent, for example the above hashmap example becomes:>>> from redis_ds.redis_hash_dict import PickleRedisHashDict
>>> y = PickleRedisHashDict('some_other_key')
>>> y
{}
>>> y['a'] = {'obj': 'ect'}
>>> y
{'a': {'obj': 'ect'}}
>>> y['a']['obj']
'ect'The same can be done using JSON instead of Pickle by changing it to:
>>> from redis_ds.redis_hash_dict import JSONRedisHashDict
and so on. The same is true for ``RedisList`` which has ``PickleRedisList``
and ``JSONRedisList``, and so on.