luochen1990 / ring_redis

a python package in pure python; a lightweight, high available & extensible cache solution using redis
18 stars 4 forks source link

RING REDIS

What for:

I want a lightweight, High Available & Extensible cache solution using redis, but nutcracker is too heavy for a system with only 2 or 3 application servers and 2 or 3 redis instances. and there isnt a good enough implementation of consistant hash using pure python. so I wrote this. I used it in 2 project and they are running well till now when half a year passed. so I shared it for people who have the same requirement.

Features:

API list:

Install

via pip

pip install ring_redis

via source code

cd path/to/ring_redis
python setup.py install

How to use:

################### your redis configuration #####################

REDIS_CONF = {
    'group0' : {
        'node0': {
            'capacity': 50 * 1024 ** 2,
            'connection': {
                'host' : '192.168.230.45',
                'port' : 15061,
                'db': 0,
                'socket_timeout': 5e-3,
            },
        },
        'node1': {
            'capacity': 50 * 1024 ** 2,
            'connection': {
                'host' : '192.168.230.46',
                'port' : 15061,
                'db': 0,
                'socket_timeout': 5e-3,
            },
        },
    },
}

############################ useage ##############################

from ring_redis import redis_dict

test = redis_dict(REDIS_CONF['group0'], prefix='test.', expire=20)

test['a'] = 'abc'
print("test['a'] : %s" % (test['a']))

print("len(test) : %s" % (len(test)))
print("test.keys() : %s" % (test.keys()[:100]))
print("'a' in test? : %s" % ('a' in test))
print("'b' in test? : %s" % ('b' in test))

print("test.visit_redis('incr', 'x', 1) : %s" % (test.visit_redis('incr', 'x', 1)))
print("test.get_entry('x') : %s" % (test.get_entry('x')))
print("test.total_hash(test.get_entry('x')) : %s" % (test.total_hash(test.get_entry('x'))))
print("test.alive_hash(test.get_entry('x')) : %s" % (test.alive_hash(test.get_entry('x'))))

Notice: