我是靠谱客的博主 务实小猫咪,最近开发中收集的这篇文章主要介绍python和redis实现对象持久化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

喜欢哪里学哪里学习方式太随性,所以,知识只能一点一点积累了吧


下午的时候突然想试试序列化和持久化对象,序列化有什么趣啊一遍一遍一遍的问!想来是被之前的面试虐多了有自虐的倾向


所谓序列化嘛,就是为了保存内存中的数据结构的,还有别的意义么


随手搜了一下,各种版本的文章也是不少,最后还是实践了这篇 序列化Python对象 - 深入Python 3 


序列化的过程分成两部分,第一部分是序列化+存储,第二部分是反序列化+恢复对象过程


存储对象过程

nyandeMacBook-Pro:~ nyan$ python
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct
5 2014, 20:42:22)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> entry = {}
>>> entry['title'] = 'local pickle'
>>> entry['id'] = b'xB6xADxC5xF4'
>>> entry['time_limit'] = None
>>> import pickle
<p class="p1"><span class="s1">>>> with open('entry.pickle', 'wb') as f:</span></p><p class="p1"><span class="s1">... <span>	</span>pickle.dump(entry, f)</span></p><p class="p1"><span class="s1">... 
>>></span></p>


至此,序列化过程结束,然后在终端当前的文件夹创建了entry.pickle文件


恢复对象过程

nyandeMacBook-Pro:~ nyan$ python
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct
5 2014, 20:42:22)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle
>>> with open('entry.pickle', 'rb') as f:
...
entry = pickle.load(f)
...
>>> entry
{'title': 'local pickle', 'id': b'xb6xadxc5xf4', 'time_limit': None}

既然文件已经存储过了,没必要像原文那样分成两个终端来测试

测试结果表明可以将序列化的对象恢复



既然文件测试完成了,下面要怎么跟redis结合,解决掉文件的部分就好了,然后去查了一下pickle.py文件,发现果然有相应的方法存在

</pre><pre name="code" class="python">Functions:
dump(object, file)
dumps(object) -> string
load(file) -> object
loads(string) -> object

dumps和loads方法可以轻松解决文件的问题,下面是测试

>>> str = pickle.dumps(entry)
>>> print(str)
b'x80x03}qx00(Xx02x00x00x00idqx01Cx04xb6xadxc5xf4qx02Xx05x00x00x00titleqx03Xx0cx00x00x00local pickleqx04Xnx00x00x00time_limitqx05Nu.'
>>> ent = pickle.loads(str)
>>> ent
{'id': b'xb6xadxc5xf4', 'title': 'local pickle', 'time_limit': None}

避开文件的持久化和恢复已经解决,然后就是跟redis的结合,继续之前的实验

>>> import redis
>>> r = redis.Redis('127.0.0.1', '6379', '0')
>>> r.set('entrystr', str )
True
>>> r.get('entrystr')
b'x80x03}qx00(Xx02x00x00x00idqx01Cx04xb6xadxc5xf4qx02Xx05x00x00x00titleqx03Xx0cx00x00x00local pickleqx04Xnx00x00x00time_limitqx05Nu.'
>>> 



如此,python和redis的对象持久化过程完成



最后

以上就是务实小猫咪为你收集整理的python和redis实现对象持久化的全部内容,希望文章能够帮你解决python和redis实现对象持久化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部