2013-09-27 56 views
2

我试图实现memcached的比较并设置的模式,继圭多的指令:Memcached的比较和设置模式产生错误的结果

http://neopythonic.blogspot.nl/2011/08/compare-and-set-in-memcache.html

但是,我似乎并没有做对了,我不知道什么是错的。下面的文件使用Django(1.4.5 Final)和python-memcache(1.48)。

settings.py

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': '127.0.0.1:11211', 
    } 
} 

djangocache.py

#!/usr/bin/env python 
from django.core.cache import cache 
import multiprocessing.dummy 

django_key = "TEST" 
cached_key = cache.make_key(django_key).encode("UTF-8") 

def add_to_cache(item): 
    client = cache._cache 
    #client = cache._lib.Client(cache._servers) 

    while True: 
     items = client.gets(cached_key) 
     if client.cas(cached_key, items+(item,)): 
      break 

if __name__ == "__main__": 
    cache.set(django_key,()) 

    p = multiprocessing.dummy.Pool(2) 
    p.map(add_to_cache, range(10)) 
    print(len(cache.get(django_key))) 

运行它:

[email protected] ~/test $ DJANGO_SETTINGS_MODULE=settings python djangocache.py 
5 

它occasi在处理比赛条件时,你可以期望输出6,7等。我试过多个客户端实例(请参阅评论)。

帮助?

回答

3

python-memcached默认禁用cas。通过添加

client.cache_cas = True 

到您的代码。

致谢Nate Thelen,谁的评论我发现后问这个问题。

相关问题