为什么Django的缓存可以与locmem一起工作但是memcached失败了?

时间:2009-07-08 23:14:32

标签: python django caching memcached

将Django的缓存与locmem一起使用(使用简单的Python类作为存储在lists / tuples / maps中的值)可以很好地工作,但不能与memcached一起使用。

只有一小部分密钥(尽管分配了大量内存和大量超时)进入memcached,并且它们都没有任何关联值。

检索它们时,不返回任何值,它们将从缓存中删除。

强制值为“hi”会使缓存中出现的值可检索,但不会解释为什么大多数键都不存在。

问题:

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

2 个答案:

答案 0 :(得分:3)

要了解发生了什么,请运行memcached -vv 2>/tmp/mc_debug_log(我假设您使用的是某种Unixy系统)并运行时间 - 您将完成后在该日志文件中查找详细信息。

根据你正在使用的memcached的Python接口,可能只有字符串作为值支持(如cmemcache中的StringClient模块)或者所有pickleable对象都是(带有酸洗的开销)当然,如同在同一个cmemcache,GAE的memcachepython-memcached中的更一般的客户端模块一样;如果你只能使用字符串作为值,可能你正在使用前一种类型的接口?

答案 1 :(得分:3)

显然,键中不能有空格:

http://code.djangoproject.com/ticket/6447
http://blog.pos.thum.us/2009/05/22/memcached-keys-cant-have-spaces-in-them/

当我使用带有空格的钥匙时,一切都变得无法预测。