redisstorage.py 1018 B

1234567891011121314151617181920212223242526272829303132333435
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. from library.wechatpy.session import SessionStorage
  4. from library import to_text
  5. from library.wechatpy.utils import json
  6. class RedisStorage(SessionStorage):
  7. def __init__(self, redis, prefix='wechatpy'):
  8. for method_name in ('get', 'set', 'delete'):
  9. assert hasattr(redis, method_name)
  10. self.redis = redis
  11. self.prefix = prefix
  12. def key_name(self, key):
  13. return '{0}:{1}'.format(self.prefix, key)
  14. def get(self, key, default=None):
  15. key = self.key_name(key)
  16. value = self.redis.get(key)
  17. if value is None:
  18. return default
  19. return json.loads(to_text(value))
  20. def set(self, key, value, ttl=None):
  21. if value is None:
  22. return
  23. key = self.key_name(key)
  24. value = json.dumps(value)
  25. self.redis.set(key, value, ex=ttl)
  26. def delete(self, key):
  27. key = self.key_name(key)
  28. self.redis.delete(key)