我正在使用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?