1. 程式人生 > >python和redis實現物件持久化

python和redis實現物件持久化

喜歡哪裡學哪裡學習方式太隨性,所以,知識只能一點一點積累了吧

下午的時候突然想試試序列化和持久化物件,序列化有什麼趣啊一遍一遍一遍的問!想來是被之前的面試虐多了有自虐的傾向

所謂序列化嘛,就是為了儲存記憶體中的資料結構的,還有別的意義麼

序列化的過程分成兩部分,第一部分是序列化+儲存,第二部分是反序列化+恢復物件過程

儲存物件過程

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'\xB6\xAD\xC5\xF4'
>>> 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'\xb6\xad\xc5\xf4', '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'\x80\x03}q\x00(X\x02\x00\x00\x00idq\x01C\x04\xb6\xad\xc5\xf4q\x02X\x05\x00\x00\x00titleq\x03X\x0c\x00\x00\x00local pickleq\x04X\n\x00\x00\x00time_limitq\x05Nu.'
>>> ent = pickle.loads(str)
>>> ent
{'id': b'\xb6\xad\xc5\xf4', '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'\x80\x03}q\x00(X\x02\x00\x00\x00idq\x01C\x04\xb6\xad\xc5\xf4q\x02X\x05\x00\x00\x00titleq\x03X\x0c\x00\x00\x00local pickleq\x04X\n\x00\x00\x00time_limitq\x05Nu.'
>>> 

如此,python和redis的物件持久化過程完成

相關推薦

pythonredis實現物件持久化

喜歡哪裡學哪裡學習方式太隨性,所以,知識只能一點一點積累了吧 下午的時候突然想試試序列化和持久化物件,序列化有什麼趣啊一遍一遍一遍的問!想來是被之前的面試虐多了有自虐的傾向 所謂序列化嘛,就是為了儲存記憶體中的資料結構的,還有別的意義麼 序列化的過程分成兩部分,第

PythonRedis實現訂單監聽,語音播報

1.MP3格式的音訊檔案 如 audio.mp3 2.建立虛禮環境 建立虛擬環境 安裝:pip install virtualenv 建立:virtualenv venv 啟用:venv\Scripts\activate 3.安裝所需擴充套件 pip install playso

pythonredis之間的交互

set tin res exception 交互 chan exceptio 減少 input python和redis之間的交互 一. redis模塊 安裝模塊: pip3 install redis 連接方式: r = redis.Redis(host=‘loca

今日頭條面試題——LRU原理Redis實現

unsigned dom bestv acs 大量 不存在 技術 aci 頭條 很久前參加過今日頭條的面試,遇到一個題,目前半部分是如何實現 LRU,後半部分是 Redis 中如何實現 LRU。 我的第一反應應該是內存不夠的場景下,淘汰舊內容的策略。LRU ... Leas

LRU原理Redis實現——一個今日頭條的面試題

滿了 存儲空間 當前 node 硬盤 java 原理 remove http 看了評論,發現有些地方有問題,更新了圖和一些描述,希望可以更清晰一些,也歡迎關註,還會有幹貨文章 -------- 很久前參加過今日頭條的面試,遇到一個題,目前半部分是如何實現 LRU,後半部

Leetcode 929 獨特的電子郵件(PythonC++實現

每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。 例如,在 [email protected]中, alice 是本地名稱,而 leetcode.com 是域名。 除了小寫字母,這些電子郵件還可能包含 ','

基於springbootredis實現的單點登入

1、具體的加密和解密方法 package com.example.demo.util; import com.google.common.base.Strings; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder

LeetCode- 16. 最接近的三數之和 (Medium)pythonc++實現

給定一個包括 n 個整數的陣列 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。 例如,給定陣列 n

python c++實現旋轉矩陣到尤拉角的變換

在攝影測量學科中,國際攝影測量遵循OPK系統,即是xyz轉角系統,而工業中往往使用zyx轉角系統。 旋轉矩陣的意義:描述相對地面的旋轉情況,yaw-pitch-roll對應zyx對應k,p,w #inc

Leetcode 929 獨特的電子郵件(PythonC++實現

每封電子郵件都由一個本地名稱和一個域名組成,以 @ 符號分隔。 例如,在 [email protected]中, alice 是本地名稱,而 leetcode.com 是域名。 除了小寫字母,這些電子郵件還可能包含 ',' 或 '+'。 如果在電子郵件地址的本

python3版本的flask環境,使用Python Flask實現restful服務

搭建py3版本的flask環境 錯誤做法 1. 在搭建py3的flask虛擬環境時,virtualenv --no-site-packages py3flask 報錯: virtualenv Impo

分別用OpenCV-PythonNumpy實現傅立葉變換逆傅立葉變換

Numpy實現 fft = np.fft.fft2(img) 將空間域轉化為頻率域 OpenCV實現 dft = cv2.dft(np.float32(img),flag=cv2.DFT_COMPLEX_OUTPUT) 這個函式與np.fft.fft2(img)實現相同的功能,但要注意先

LRU 原理 Redis 實現

轉自:https://baijiahao.baidu.com/s?id=1595292420641966263&wfr=spider&for=pc 很久前參加過今日頭條的面試,遇到一個題,目前半部分是如何實現 LRU,後半部分是 Redis 中如何實現 LRU。 我的第一反應

資料探勘經典演算法:Logistic(邏輯迴歸) pythonsklearn實現

Logistic雖然不是十大經典演算法之一,但卻是資料探勘中常用的有力演算法,所以這裡也專門進行了學習,以下內容皆為親自實踐後的感悟和總結(Logistic原理、程式碼實現和優化、真實樣例資料、sklearn實現)。為了記錄的比較清楚,所以內容可能有點多,但都比較淺顯,下面進

資料探勘十大演算法(一):決策樹演算法 pythonsklearn實現

學完到第三章——決策樹,python程式碼實現的僅是ID3演算法,sklearn為優化過的C4.5,這裡做一個詳細的總結包括(原理、程式碼、視覺化、scikit-learn實現),皆為親自實踐後的感悟。以下進入正文。 早前簡單瞭解了決策樹的原理,然後為了儘快使用便沒有深究直

2.二維陣列中的查詢(pythonjava實現

題目:在一個二維陣列中,每一行都是按照從左到右遞增的順序排序,每一列都是安裝從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中書否含有該整數。 演算法思想:我們知道每一行都是遞增排序的,每一列也是從上到下遞增排序的,所以左上角的數是最小的,

資料探勘十大演算法(九):樸素貝葉斯 pythonsklearn實現

第三個演算法終於算是稍有了解了,其實當你結合資料瞭解了它的實現原理後,你會發現確實很樸素。這裡對樸素貝葉斯演算法做一個介紹和總結,包括(原理、一個程式碼示例、sklearn實現),皆為親自實踐後的感悟,下面進入正文。 原理: 首先我們需要了解概率論的一些簡單知識:

python selenium實現web UI功能自動化測試框架(米兔888)

之前分享了python和requests搭配實現的介面自動化測試框架,今天,我再來整理分析下基於python和selenium的web UI自動化測試,希望能對大家有所幫助,也是自己整理知識學習的方法,跟大家一起努力,奮鬥在自動化測試的道路上。其實UI自動化和介面自動化框架的

pythonjava實現數獨遊戲

使用python和java實現數獨遊戲,有比較才有收穫哦 1、Python版 #--coding:utf-8-- import random import itertools from copy import deepcopy def make_board(m=3):

迴圈神經網路教程第四部分-用PythonTheano實現GRU/LSTM迴圈神經網路

作者:徐志強 連結:https://zhuanlan.zhihu.com/p/22371429 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 本篇教程的程式碼在Github上。這裡是迴圈神經網路教程的最後一部分,前幾部分別是: 本篇中我們將學習LSTM(長短項記憶)網路和G