我这里用的是国际航空公司的python客户端。在缓存中存储普通字符串时,我没有发现任何问题,因为当我检索密钥时,我得到的字符串与执行conn.get(键)时保存的字符串相同。
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})
如果我想将gzipped内容保存在值的位置,我不会发现任何错误,但是我无法获得确切的内容。
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的打印值。它们不匹配,我需要gzipped内容,因为我的内容超过1MB,我只需要gzipped内容。请指点我哪里做错了。
我知道我们可以将内容分解成更小的块,以便在获取它们之后进行存储和连接,但是在获取数据之后,我仍然需要对内容进行Gzip。所以我想为什么不直接存储Gzipped内容,但这似乎不适合我。任何线索都有根据,谢谢。
发布于 2016-11-18 03:07:07
如果put_value
是一个字符串,它将在遇到的第一个\0
字符上被截断。在发送字节数组之前,尝试将put_value
转换为字节数组:
conn.put(key, {'value': bytearray(put_value,"utf-8")})
https://stackoverflow.com/questions/40656795
复制相似问题