2017-02-03 70 views
1

我想實現緩存到我的新的Django項目,這裏的問題是,通過PHP服務器設置緩存,並且我需要從Django代碼讀取它。我可以在Django中設置緩存,並在Django中讀取,我也可以在PHP中設置緩存,並使用PHP讀取。但是,我無法跨平臺做到這一點。即我無法在Django中讀取PHP中設置的緩存,反之亦然。雖然,如果我執行telnet localhost 11211並獲取這兩個鍵,我只能使用PHP設置鍵。 我已經完成了pip install python-memcached的安裝以使用Memcached和Python。 所以,我的問題是我如何爲Django和PHP使用通用緩存服務器?php memcached和django memcached存儲有何不同?

這是我的PHP代碼段

$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' 

以下是我的Python/Django的片斷

settings.py

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

在觀點,

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' 

在ubun恩終端

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

因此,django_key不能在memcached shell中工作? – lapinkoira

+0

是的,只有'php_key'在memcached shell中工作 –

回答

4

這是因爲Django在傳遞給memcached的關鍵是不完全是你調用使用cache.set

由用戶提供的緩存鍵不逐字使用的密鑰 - 它結合 與緩存前綴和密鑰版本來提供最終緩存密鑰。通過 默認情況下,這三個部分是用冒號連接以產生一個最終的字符串

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

要麼調整設置,或創建自己的KEY_FUNCTION以確保PHP的鑰匙匹配Django的鑰匙。

+0

我看到,lemmi給它一個鏡頭。 –

+0

對不起,忘了接受答案。 –

+0

非常感謝您的項目 – e4c5