redis python接口,使用json、pickle、msgpack或自定义序列化程序序列化所有值。
serialized-redis-interface的Python项目详细描述
redis python接口,使用json、pickle、msgpack或自定义序列化程序序列化所有值。
开始
安装
pip install serialized-redis-interface
使用量
>>> importserialized_redis>>> r=serialized_redis.JSONSerializedRedis(host='localhost',port=6379,db=0)>>> r.set('foo',{'test':'dict'})True >>> r.get('foo'){'test': 'dict'} >>> r=serialized_redis.PickleSerializedRedis(host='localhost',port=6379,db=0)>>> r.set('foo',{'test':'dict'})True >>> r.get('foo'){'test': 'dict'} >>> r=serialized_redis.MsgpackSerializedRedis(host='localhost',port=6379,db=0)>>> r.set('foo',{'test':'dict'})True >>> r.get('foo'){'test': 'dict'}
serialized-redis扩展redis-py并使用相同的接口。
大多数命令、piplines和pubsub都受支持,并负责序列化和反序列化值。
^必须安装{tt2}$才能使用MsgpackSerializedRedis。
所有字符串都是python str.
限制
当值被序列化时,不支持操作或从值中提取数据的redis操作。
- 排序命令可能无法返回正确的顺序,具体取决于使用的序列化程序。
- zscan和sscan匹配选项仅适用于完全匹配。
- strlength和hstrlength将返回序列化值的长度。
- 所有词典编纂命令,如ZLyCube、ZrReMrimeBeLeX和ZrReRangeBeLeX都不支持
- incr仅支持json序列化程序
- redis散列的字段未序列化
额外方法
smembers_as_list,sdiff_as_list,sinter_as_list,sunion_as_list可以在redis的成员 一旦反序列化,set就不能散列。
>>> r=serialized_redis.JSONSerializedRedis()>>> r.sadd('myset',{'dict':1})1 >>> r.smembers('myset')Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/michael/workspace/Origin_Nexus/serialized_redis/serialized_redis/__init__.py", line 176, in smembersreturnset(super().smembers(*args,**kwargs))TypeError: unhashable type: 'dict'>>> r.smembers_as_list('myset')[{'dict': 1}]
smart_get和smart_set可用于检索和存储python结构及其redis对应项:
- pythonlist作为redis列表
- pythonset作为redis集
- pythondict作为redis散列,字段不会(反)序列化。
自定义序列化程序
您可以使用自己的序列化和反序列化功能:
>>> r=serialized_redis.SerializedRedis(serialization_fn=my_serializer,deserialization_fn=my_deserializer)
如果反序列化程序函数需要python 3字符串而不是字节,则可以添加decode_responses=True参数。
需要时将字节解码到str是反序列化函数的责任。