jac*_*ack 5 compression django memcached caching
压缩Python对象(列表,字典,字符串等)的快速方法是什么?在从缓存中读取后将它们保存到缓存和解压缩之前?
我正在使用Django,我希望直接在Django的缓存后端添加压缩/解压缩支持,这使得它可以用于我所有的Django应用程序.
我查看了django/core/cache/backends/memcached.py
import cmemcache as memcache
class CacheClass(BaseCache):
def __init__(self, server, params):
BaseCache.__init__(self, params)
self._cache = memcache.Client(server.split(';'))
def get(self, key, default=None):
val = self._cache.get(smart_str(key))
if val is None:
return default
return val
def set(self, key, value, timeout=0):
self._cache.set(smart_str(key), value, self._get_memcache_timeout(timeout))
Run Code Online (Sandbox Code Playgroud)
看起来像pickle/unpickle是由cmemcache库完成的.我不知道在哪里放压缩/解压缩代码.
我进一步研究了 python-memcache 的源代码。
它已经支持在将值发送到 memcached 之前通过 zlib 对其进行压缩。
lv = len(val)
# We should try to compress if min_compress_len > 0 and we could
# import zlib and this string is longer than our min threshold.
if min_compress_len and _supports_compress and lv > min_compress_len:
comp_val = compress(val)
# Only retain the result if the compression result is smaller
# than the original.
if len(comp_val) < lv:
flags |= Client._FLAG_COMPRESSED
val = comp_val
def _set(self, cmd, key, val, time, min_compress_len = 0):
Run Code Online (Sandbox Code Playgroud)
以下是 Django 在其 memcache 后端中对“set”命令的实现:
def set(self, key, value, timeout=0):
self._cache.set(smart_str(key), value, self._get_memcache_timeout(timeout))
Run Code Online (Sandbox Code Playgroud)
显然它没有“min_compress_len”参数。
| 归档时间: |
|
| 查看次数: |
2206 次 |
| 最近记录: |