我們在用Python Django開發秒殺系統的時候,要將Django 查詢到商品詳細信息保存到Redis緩存中去,但Redis不能直接保存對象,但有什麼方法呢?
我們發現可用Python的pickle模塊。
pickle模塊可以序列化對象並保存到磁盤中,並在需要的時候讀取出來,任何對象都可以執行序列化操作。
Pickle模塊中最常用的函數爲:
1、pickle.dumps(obj[, protocol])
函數的功能:將obj對象序列化爲string形式,而不是存入文件中。
參數講解:
obj:想要序列化的obj對象。
protocal:如果該項省略,則默認爲0。如果爲負值或HIGHEST_PROTOCOL,則使用最高的協議版本。
2、pickle.loads(string)
函數的功能:從string中讀出序列化前的obj對象。
參數講解:
string:文件名稱。
【代碼示例】
..... #取出商品id product_id = request.GET.get('product_id') #構造商品key product_key = 'product_{}'.format(product_id) #根據商品key從緩存中取數據 product_detail = getcache(product_key) #對取出數據進行判斷 if product_detail: #如取出了數據,對數據進行序列化讀出爲對象 product_detail = pickle.loads(product_detail) #如沒有數據 elif product_detail is None: #從數據庫中查詢數據 product_detail = SaleProducts.objects.filter(id=product_id) #對數據進行序列化,並保存到緩存中 setcache(product_key,60*10,pickle.dumps(product_detail)) ......
緩存相關函數
#設置key,value def setcache(key,time,value): master.setex(key,time,value) #讀取key\value def getcache(key): return master.get(key)
對相關技術有興趣的,可訪問我們的課程51CTO學院:升職加薪視頻課程:高併發秒殺系統架構分析設計與開發