如何调整Django PyMemcacheCache缓存限制使其超过1MB
PyMemcacheCache 调整memcached单value大小限制正确配置方法
旧版MemcacheCache后端基于python-memcached库实现,配置大value阈值的参数是server_max_value_length,PyMemcacheCache后端底层依赖pymemcache库,参数名不通用,直接套用旧配置无法生效。
你当前docker配置中给memcached服务端添加-I 10m启动参数的操作是正确的,已经将服务端单条缓存的最大存储上限调整为10MB,只需修正Django侧客户端配置即可。
正确配置
将CACHES配置中OPTIONS的参数名改为pymemcache识别的max_value_length,数值与服务端10MB的配置对齐:
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache', 'LOCATION': 'cache:11211', 'OPTIONS': { 'max_value_length': 1024 * 1024 * 10 } } }
配置逻辑说明
PyMemcacheCache会将OPTIONS内的所有参数直接透传给底层pymemcache.Client构造函数,无额外参数拦截,需要查询可用OPTIONS时直接参考pymemcache库的Client初始化参数说明即可。max_value_length是pymemcache客户端侧的校验参数,默认值为1024*1024(即1MB),待缓存内容超过该值时,客户端会直接抛出错误,不会向memcached服务端发送请求,这也是仅修改服务端配置时大value无法存入的核心原因。- 该参数的设置值不要超过memcached服务端
-I参数指定的大小,否则客户端放行后服务端仍会拒绝存储。
生效验证
配置完成后进入Django shell,执行以下代码验证效果:
from django.core.cache import cache # 写入2MB大小的测试值,有效期60秒 cache.set("large_value_test", "a" * 1024 * 1024 * 2, 60) # 读取成功返回True即代表配置生效 print(cache.get("large_value_test") is not None)
返回True即代表大小限制调整生效,可正常缓存超过1MB的接口响应内容。
内容的提问来源于stack exchange,提问作者Peter Williams
相关产品推荐
相关产品推荐

