PHP memcache - 存储整个对象?

时间:2017-01-08 18:06:09

标签: php memcached

我有一些缓存的应用程序翻译,例如:

$translations = [
    'en' => [
        'key_1' => 'translation 1',
        'key_2' => 'translation 2',
        ...
        'key_10000' => 'translation 10000',
    ],
    'de' => [
        'key_1' => 'translation 1',
        'key_2' => 'translation 2',
        ...
        'key_10000' => 'translation 10000',
    ],
];
$memcache->set('translations', $translations);

如果我只想访问页面上的几个键,我必须加载整个数组,因此它会消耗大量内存。将每个翻译存储为memcache的额外密钥是不是更好?从memcache多次访问它是不是很慢?

喜欢这里:

$memcache->set('translations_en_key_1', 'translation 1');
$memcache->set('translations_en_key_2', 'translation 2');
...
$memcache->set('translations_en_key_10000', 'translation 10000');

$memcache->set('translations_de_key_1', 'translation 1');
$memcache->set('translations_de_key_2', 'translation 2');
...
$memcache->set('translations_de_key_10000', 'translation 10000');

谢谢!

1 个答案:

答案 0 :(得分:1)

那么它取决于你实际使用的个别密钥数量。因此,例如,如果每次访问页面时使用100个键,那么执行多重请求而不是获得如此巨大的对象会更有意义。

此外,您应该知道存储的对象大小限制为1MB。因此,如果每个翻译采用25字节,那么您将无法存储超过40000个翻译。

此外,如果您的翻译对象小到25B,您可以进行一些优化以在memcache中存储更多对象。您可以查看此link

你可以阅读this以更好地理解memcache的内部结构