Skip to content

Instantly share code, notes, and snippets.

@noman798
Created May 4, 2018 23:00
Show Gist options
  • Save noman798/5d56d9fa6939edf4d1b9d1bfd6d30782 to your computer and use it in GitHub Desktop.
Save noman798/5d56d9fa6939edf4d1b9d1bfd6d30782 to your computer and use it in GitHub Desktop.
# coding:utf-8
from intstr import IntStr
redis_keyer = IntStr(
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'
)
REDIS_KEY_ID = 'RedisKeyId'
REDIS_KEY = 'RedisKey'
REDIS_ID_KEY = 'RedisIdKey'
_EXIST = set()
class RedisKey(object):
def __init__(self, redis):
self.redis = redis
def __getattr__(self, attr):
def _(name=''):
return self(attr, name)
return _
def __call__(self, attr, name=''):
key = attr + name
redis = self.redis
if key in _EXIST:
raise Exception('redis key is already defined %s' % key)
_EXIST.add(key)
if redis:
_key = redis.hget(REDIS_KEY, key)
if _key is None:
id = redis.incr(REDIS_KEY_ID)
_key = redis_keyer.encode(id)
if name and '%' in name:
_key = _key + "'" + name
p = redis.pipeline()
p.hset(REDIS_KEY, key, _key)
p.hset(REDIS_ID_KEY, _key, key)
p.execute()
else:
_key = str(_key, 'utf-8')
return _key
if __name__ == '__main__':
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment