2016-11-17 53 views
2

我在這裏使用aerospike python客戶端。同時存儲在緩存中普通字符串我沒有發現任何問題,因爲當我取回鑰匙,我得到我救了相同的字符串時,我做conn.get(鍵)如何在Aerospike(緩存)中存儲Gzip內容?

import aerospike 

CONN_AEROSPIKE_CONFIG = {'hosts': [('127.0.0.1', 3000)]} 
conn = aerospike.client(CONN_AEROSPIKE_CONFIG).connect() 
key = ('namspace_name', 'set_name', 'key_name') 
value = "some big string" 
conn.put(key, {'value': value}) 

如果我想保存gzip壓縮的內容在價值的地方,我沒有發現任何錯誤,但我無法找回確切的內容。

from gzip import GzipFile 
from io import BytesIO 
def compress_string(s): 
    zbuf = BytesIO() 
    with GzipFile(mode='wb', compresslevel=6, fileobj=zbuf, mtime=0) as zfile: 
     zfile.write(s) 
    return zbuf.getvalue() 

put_value = compress_string(value) 
conn.put(key, {'value': put_value}) 
_, _, get_value = conn.get(key) 

我檢查了put_value,get_value的打印值。他們不匹配,我需要gzip內容,因爲我的內容超過1MB,我只需要gzip內容。請指導我在哪裏做錯了。


我知道,我們可以打破的內容分成較小的塊存儲,讓他們以後串聯,而我又需要獲得數據後,GZIP內容。所以我想爲什麼不直接存儲Gzip內容,但似乎並沒有爲我工作。任何潛在客戶都會被安裝,謝謝。

回答

3

如果put_value是一個字符串,它將在遇到的第一個\0字符處被截斷。嘗試轉換put_value到發送之前的一個字節陣列:

conn.put(key, {'value': bytearray(put_value,"utf-8")}) 
+1

謝謝@ jboone100真的有幫助。但我已經取出格式「utf-8」,因爲我在轉換爲bytearray時出錯。所以我簡單地重寫了這行: 'conn.put(key,{'value':bytearray(put_value)})'' –