Skip to content

Instantly share code, notes, and snippets.

@thewisenerd
Created September 15, 2020 15:26
Show Gist options
  • Save thewisenerd/0a821636058370953257f21c4bf9f1ba to your computer and use it in GitHub Desktop.
Save thewisenerd/0a821636058370953257f21c4bf9f1ba to your computer and use it in GitHub Desktop.
redis-cluster.py
import redis
from redis.exceptions import ResponseError
class RedisCluster:
def __init__(self, *args, **kwargs):
self._a = args
self._kw = kwargs
self._c = redis.Redis(*args, **kwargs)
def shim(self, fn_getter, *args, **kwargs) -> any:
try:
fn = fn_getter(self._c)
res = fn(*args, *kwargs)
return res
except ResponseError as r:
e = str(r)
if e.startswith('MOVED'):
host, port = e.split(' ')[2].split(':')
kw = {}
kw.update(self._kw)
kw['host'] = host
kw['port'] = port
self._c = redis.Redis(*self._a, **kw)
return self.shim(fn_getter, *args, **kwargs)
else:
raise r
def get(self, name) -> str:
return self.shim(lambda x: x.get, name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment