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