首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将压缩内容存储在Aerospike (缓存)?

如何将压缩内容存储在Aerospike (缓存)?
EN

Stack Overflow用户
提问于 2016-11-17 13:57:19
回答 1查看 91关注 0票数 2

我这里用的是国际航空公司的python客户端。在缓存中存储普通字符串时,我没有发现任何问题,因为当我检索密钥时,我得到的字符串与执行conn.get(键)时保存的字符串相同。

代码语言:javascript
代码运行次数:0
运行
复制
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内容保存在值的位置,我不会发现任何错误,但是我无法获得确切的内容。

代码语言:javascript
代码运行次数:0
运行
复制
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内容,但这似乎不适合我。任何线索都有根据,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-11-18 03:07:07

如果put_value是一个字符串,它将在遇到的第一个\0字符上被截断。在发送字节数组之前,尝试将put_value转换为字节数组:

代码语言:javascript
代码运行次数:0
运行
复制
conn.put(key, {'value': bytearray(put_value,"utf-8")})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40656795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档