2017-06-21 36 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?

回答