2017-06-21 80 views
0

我正在使用PHP填充我的memcached,並且Django讀取緩存。不支持Django緩存整數?

我已經在Django settings.py中定義了make_key函數,因此密鑰是相同的,Django不會修改它。

def make_key(key, key_prefix, version): 
    return key 


CACHE_HOST = "localhost" 

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': CACHE_HOST + ':11211', 
     'KEY_FUNCTION': make_key 
    } 
} 

一切工作正常,同時存儲和檢索字符串往來緩存。當我試圖通過memcache存儲整數值時,問題就出現了。 PHP使用以下測試代碼片段。

$host = "localhost"; 
$port = "11211"; 

$memObj = new Memcached(); 
$memObj->addServer($host, $port); 
$memObj->set('sample_key', 123); 

如果我查詢以上直接使用telnet localhost 11211緩存鍵,我能看到價值。但是,當我從Django做到這一點時,我得到了None。以下是我的Django測試代碼片段。

from django.core.cache import cache 

print(cache.get('sample_key')) # prints None 

現在,如果我在Django中設置密鑰,那麼我可以在Django中獲得它。

cache.set('sample_key', 123) 
print(cache.get('sample_key')) # prints 123 

直到這一點,得出的結論是,我可以設置在Django和緩存爲整數得到Django的PHP的Telnet,但是,如果我設置緩存爲整數在PHP,我只可以得到PHP的Telnet

+--------+---------------------+ 
| SET | GET     | 
+--------+---------------------+ 
| Django | Django, PHP, Telnet | 
+--------+---------------------+ 
| PHP | PHP, Telnet   | 
+--------+---------------------+ 

一些調試後,我發現,當Django的設置一個Integer時,它實際上將它作爲一個Double。我從php var_dump發現了這個。

var_dump($memObj->get('sample_key')); # prints double(123) 

現在,我試着在PHP中設置整數作爲double。令人驚訝的是Django能夠獲得它。

$memObj->set('sample_key', 123.0); 
在Django

print(cache.get('sample_key')) # prints 123 

TL;博士;

$memObj->set('sample_key', 123.0); # in PHP 
print(cache.get('sample_key')) # in Django # prints 123 

$memObj->set('sample_key', 123); # in PHP 
print(cache.get('sample_key')) # in Django # prints None 

那麼,什麼是這裏的問題,我如何在PHP中設置一個整數,並把它在Django?

回答