Redis 怎麼實現保存Django 查詢集

我們在用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學院:升職加薪視頻課程:高併發秒殺系統架構分析設計與開發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章