蟒蛇的本地类型
redistypes的Python项目详细描述
redis绑定是将redis类型作为本机类型引入python的一种尝试。它 基于redis-py并具有 到目前为止实现了以下类型:
此外,它还提供了一些redis描述符接口:
- Iredisfield
- iredislistfield
它完全是接口,因为它要求用户重写get_key_name 方法定义redis的密钥名。下面是一个例子 已实现(可在example.py中找到)。
fromredisimportRedisfromredistypes.descriptorsimportIRedisField,IRedisListFieldr_connection=Redis()classRedisField(IRedisField):def__init__(self,pickling=True):super(RedisField,self).__init__(redis_connection=r_connection,pickling=pickling)defget_key_name(self,instance):return':'.join([instance.__class__.__name__,str(instance.pk),self.name])classRedisListField(IRedisListField,RedisField):passclassStudent:name=RedisField()subjects=RedisListField()def__init__(self,pk):self.pk=pk
上面定义的Student类可以执行以下操作:
>>> fromexampleimportStudent>>> s=Student(pk=1)>>> s.name='John Galt'>>> s.subjects=['math','physics']>>> s.nameJohn Galt >>> s.subjectsRedisList: ['math', 'physics'] >>> s.subjects.append('p.e.')>>> s.subjectsRedisList: ['math', 'physics', 'p.e.'] >>> # Values stored inside the Redis types are immutable!>>> s.subjects.append({'name':'art','avg_score':4.5})>>> s.subjects[3]{'avg_score': 4.5, 'name': 'art'} >>> s.subjects[3]['avg_score']=3>>> s.subjects[3]{'avg_score': 4.5, 'name': 'art'}
警告!
存储在redis类型中的所有值都是不可变的!如上所示 显示,试图更改 重新发现什么都没有。
路线图
- 通过管道查询
- 重新发现