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)