我使用PHP填充memcached,Django读取缓存。
我在Django $access_token = $_POST['access_token'];
中创建了自定义make_key
函数,因此密钥相同,Django不会对其进行修改。
settings.py
在缓存中存储和检索字符串时,一切正常。当我试图在memcache中存储一个整数值时出现问题。 PHP使用以下测试代码段。
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
}
}
如果我使用$host = "localhost";
$port = "11211";
$memObj = new Memcached();
$memObj->addServer($host, $port);
$memObj->set('sample_key', 123);
直接从缓存查询上述密钥,我可以看到该值。但是,当我从Django那里做的时候,我得到了telnet localhost 11211
。以下是我的Django测试片段。
None
现在,如果我在Django中设置密钥,那么我也可以在Django中获取密钥。
from django.core.cache import cache
print(cache.get('sample_key')) # prints None
直到这一点,我们得出结论,我可以设置缓存为Django中的整数 ,获取 Django < / strong>, PHP 和 Telnet ,但是,如果我将缓存设置为PHP 中的整数,我只能获取它在 PHP 和 Telnet 。
cache.set('sample_key', 123)
print(cache.get('sample_key')) # prints 123
经过一些调试后,我发现当Django设置+--------+---------------------+
| SET | GET |
+--------+---------------------+
| Django | Django, PHP, Telnet |
+--------+---------------------+
| PHP | PHP, Telnet |
+--------+---------------------+
时,它实际上将其设置为Integer
。我从php Double
找到了这个。
var_dump
现在,我尝试在PHP中将整数设置为double。令人惊讶的是,Django能够得到它。
var_dump($memObj->get('sample_key')); # prints double(123)
在Django,
$memObj->set('sample_key', 123.0);
TL;博士;
print(cache.get('sample_key')) # prints 123
那么,这里有什么问题,如何在PHP中设置一个整数并在Django中获取它?
答案 0 :(得分:0)
这与Memcached getting null for String set with python and then get from Java
高度相关您需要配置处理memcache的python库以增强语言之间的兼容性