最近学习redis, 做个redis的ORM练练手:
只要我定义一个类,它的实例就可以直接操作redis:
class Article(PropsMixin):
content = PropsItem('content', '') # 字段名字, 默认值
def __init__(self. id):
self.id = id
假设现在操作id为10001的Article,可以这样:
article = Article(10001)
article.content # 返回默认的空,因为还没有设置正文
article.content = '这是正文' # 在数据库里面存了id为10001的Article的文本
article = Article(10001)
article.content # 会返回Redis数据库存的正文内容
del article.content # 删除对应数据库中id为10001的Article的文本
article.content # 返回空
实现如下
import redis
redis_db = redis.StrictRedis(decode_responses=True)
class PropsMixin:
@property
def _props_db_key(self):
return self.__class__.__name__ + ':' + str(self.id)
def get_prop_item(self, name):
return redis_db.hget(self._props_db_key, name)
def set_prop_item(self, name, value):
redis_db.hset(self._props_db_key, name, value)
def del_prop_item(self, name):
redis_db.hdel(self._props_db_key, name)
class PropsItem:
def __init__(self, name, default=None):
self.name = name
self.default = default
def __get__(self, instance, owner):
r = instance.get_prop_item(self.name)
if r is None:
instance.set_prop_item(self.name, self.default or '')
return self.default
return r
def __set__(self, instance, value):
instance.set_prop_item(self.name, value)
def __delete__(self, instance):
instance.del_prop_item(self.name)
self.default = None
上述代码非常容易理解