当前位置:嗨网首页>书籍在线阅读

15-压缩

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

[toc]

3.4.5 压缩

要想完全对比该缓存功能与原始的磁盘缓存,我们需要添加最后一个功能: 压缩 。压缩的实现方式类似于磁盘缓存,先对数据进行序列化,然后使用 zlib 进行压缩,如下所示。

import zlib
from bson.binary import Binary
class RedisCache:
    def __init__(..., compress=True):
        ...
        self.compress = compress
    def __getitem__(self, url):
        record = self.client.get(url)
        if record:
            if self.compress:
                record = zlib.decompress(record)
            return json.loads(record.decode(self.encoding))
        else:
            raise KeyError(url + ' does not exist')
    def __setitem__(self, url, result):
        data = bytes(json.dumps(result), self.encoding)
        if self.compress:
            data = zlib.compress(data)
        self.client.setex(url, self.expires, data)