2017-02-03 4 views
1

새로운 Django 프로젝트에 캐싱을 구현하려고하는데 문제는 여기에 캐시가 PHP 서버를 통해 설정되어 있고 장고 코드에서 읽어야합니다. Django에서 캐시를 설정할 수 있고 Django에서 읽었을 때 PHP에서 캐시를 설정하고 PHP에서 읽을 수 있습니다. 그러나, 나는 그것을 크로스 플랫폼으로 할 수 없다. 즉 PHP에서 Django의 캐시 세트를 읽을 수 없으며 반대의 경우도 마찬가지입니다. 비록 내가 telnet localhost 11211을 수행하고 두 키를 모두 가져 오는 경우, 나는 PHP에서 설정된 키만 가져올 수 있습니다. Memcached with Python을 사용하기 위해 pip install python-memcached 설치를 수행했습니다. 그럼, 내 질문에 어떻게 장고와 PHP 모두에 대한 일반적인 캐시 서버를 사용합니까? 여기 php memcached와 django memcached 스토리지가 다릅니 까?

내 PHP의 내 파이썬/장고 settings.py 뷰에서

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

에서

을 니펫 다음 코드

$memObj = new Memcached(); 
$memObj->addServer('localhost', 11211); 
$memObj->set('php_key', 'hello php'); 
var_dump($memObj->get('django_key')); #prints False 
echo $memObj->get('php_key'); #prints 'hello php' 

, ubun에서

from django.core.cache import cache 

cache.set('django_key', 'Hello world') 
php_cache = cache.get('php_key') 
print(php_cache) # Outputs None 
django_cache = cache.get('django_key') 
print(django_cache) # Outputs 'Hello world' 

입니다 TU 터미널

telnet localhost 11211 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
get php_key 
VALUE php_key 
hello php 
END 
get django_key 
END 
+0

그래서 memcached 쉘에서 django_key가 작동하지 않습니까? – lapinkoira

+0

예, memcached 쉘에서'php_key' 만 작동합니다. –

답변

4

그 memcached를에 장고에 의해 전달 된 키가 정확히 사용자가 제공하는 캐시 키를 그대로 사용하지 cache.set

에 전화에서 사용하는 키가 아닌 때문입니다 - 과 캐시 접 두부 및 키 버전이 결합되어 최종 캐시 키를 제공합니다. 기본적으로 세 부분으로 최종 문자열

https://docs.djangoproject.com/en/1.10/topics/cache/#cache-key-transformation

하나의 설정을 조정할, 또는 PHP 키 장고 키를 일치하는지 확인하기 위해 KEY_FUNCTION 직접 만들을 생산하기 위해 콜론을 사용하여 결합됩니다.

+0

제가보기에, lemmi는 그것을 시도합니다. –

+0

죄송합니다. 답변을 수락하는 것을 잊었습니다. –

+0

프로젝트에 감사드립니다. – e4c5