在redis中存储gzip数据

2024-06-16 10:59:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的python字典,我想保存到redis缓存中,然后让API处理程序直接从缓存返回这个字典

在存储到缓存之前,我首先使用gzip压缩字符串化的dict

 transformed_object = {...big dictionary}

    byte_object = BytesIO()

    data = json.dumps(transformed_object)
    with gzip.GzipFile(fileobj=byte_object, mode="w") as f:
        f.write(data.encode())

    final_data = byte_object.getvalue()

我把它写到Redis缓存中

context.redis.set(COMPLETE_GZIPPED_CACHE, final_data)

我有一个API处理程序,希望在其中返回gzip数据

    cache_list = redis.get(COMPLETE_GZIPPED_CACHE)
    self.finish(
        {
            "status": True,
            "cache_list": cache_list,
            "updated_at": datetime.datetime.now(),
        }
    )

问题是我得到了下面的错误

TypeError: Object of type 'bytes' is not JSON serializable

在返回前端之前,是否需要先将字节解码回字符串?理想情况下,我希望前端处理解码

有更好的方法吗


Tags: 字符串redisapi处理程序cachedata字典object
1条回答
网友
1楼 · 发布于 2024-06-16 10:59:55

从其他帖子中找到了答案——编写了这样一个函数并选择使用zlib

def convert_to_gzip_format(dict):
    stringified_object = json.dumps(dict).encode("utf-8")
    compressed_file = zlib.compress(stringified_object)

    base64_string = base64.b64encode(compressed_file).decode("ascii")
    return base64_string

这会将其作为ascii字符串保存到redis。然后在前端使用pako.js将上述内容解码为可读字符串

相关问题 更多 >