Python 为什么Django';s缓存与locmem一起工作,但与memcached一起失败?

Python 为什么Django';s缓存与locmem一起工作,但与memcached一起失败?,python,django,caching,memcached,Python,Django,Caching,Memcached,将Django的缓存与locmem结合使用(将简单的Python类作为值存储在列表/元组/映射中)可以很好地工作,但不能与memcached一起工作 只有一小部分键(尽管分配了大量内存和大量超时)进入memcached,而且它们似乎都没有任何关联的值 检索它们时,不会返回任何值,并且会从缓存中删除它们 强制值为“hi”会使缓存中出现的密钥可检索,但不能解释为什么大多数密钥根本不存在 问题: 为什么只有某些键会在memcached中结束,而其他键不会结束,即使所有值都设置为“hi” 有没有办法启用

将Django的缓存与locmem结合使用(将简单的Python类作为值存储在列表/元组/映射中)可以很好地工作,但不能与memcached一起工作

只有一小部分键(尽管分配了大量内存和大量超时)进入memcached,而且它们似乎都没有任何关联的值

检索它们时,不会返回任何值,并且会从缓存中删除它们

强制值为“hi”会使缓存中出现的密钥可检索,但不能解释为什么大多数密钥根本不存在

问题:

  • 为什么只有某些键会在memcached中结束,而其他键不会结束,即使所有值都设置为“hi”
  • 有没有办法启用更多日志记录或错误报告?(一切似乎都在默默地失败)
  • 为什么Python类可以正确地序列化到locmem,但不会最终在Memcached中

  • 要了解发生了什么,请运行
    memcached-vv2>/tmp/mc_debug_log
    (我假设您在某种Unixy系统上)并运行一小段时间——完成后,您将在该日志文件中找到详细信息


    根据您使用的memcached Python接口的不同,可能只支持字符串作为值(如中的StringClient模块),也可能支持所有可pickle对象(当然有pickle和unpickle的开销),如同一cmemcache、GAE和中更通用的客户端模块;如果您只能使用字符串作为值,那么您可能正在使用前一种类型的接口?

    显然,键中不能有空格:


    当我使用一把有空格的钥匙时,一切都变得不可预测