在工作中遇到了一個問題就是,因為業(yè)務需求需要做redis加速,那么存放在redis的list列表如何才能完整的存進去,再完整的取出來呢? ? ? ? ? (推薦學習:Redis視頻教程)
如果使用redis的list存儲方法,將list = [1,2,3,4]列表中的元素一個一個遍歷取出,然后用lpush的方法將元素一個一個存進去,到最后你用完整的了lrange(‘name’,0,-1)取出,你會發(fā)現(xiàn)取出的list變成了一個str, 例如(list = ‘[1,2,3,4]’),這樣處理起來很麻煩。
經(jīng)過不斷的嘗試,發(fā)現(xiàn)了一個比較好用的庫pickle.
pikle的優(yōu)點是:序列化過程將文本信息轉變?yōu)槎M制數(shù)據(jù)流。這樣就信息就容易存儲在硬盤之中,當需要讀取文件的時候,從硬盤中讀取數(shù)據(jù),然后再將其反序列化便可以得到原始的數(shù)據(jù)。
在Python程序運行中得到了一些字符串、列表、字典等數(shù)據(jù),想要長久的保存下來,方便以后使用,而不是簡單的放入內(nèi)存中關機斷電就丟失數(shù)據(jù)。
python模塊大全中的Pickle模塊就派上用場了,它可以將對象轉換為一種可以傳輸或存儲的格式。這樣保證存儲和取出的數(shù)據(jù)的完整性。
from?redis?import?StrictRedis #?選取一個默認的redis的db倉庫 db?=?StrictRedis(host='localhost',?port=6379,?db=0,decode_responses=True) #導入pickle包 import?pickle ? list?=?[1,2,3,4] ? #?pickle?封裝list new_list?=?pickle.dumps(list) ? #?redis中存儲數(shù)據(jù),設置過期時間 db.setx('list',3600,new_list) ? result?=?db.get('list') ? get_list?=?pickle.loads(result) ? print(get_list) #?get_list?=?[1,2,3,4]
經(jīng)過pickle這樣處理后,你會發(fā)現(xiàn)取出的list好用多了。再也不用為數(shù)據(jù)轉換煞費苦心了,而且同樣的也可以處理json等數(shù)據(jù)類型的數(shù)據(jù)。
更多Redis相關技術文章,請訪問Redis視頻教程欄目進行學習!