PHP 内存缓存 - 存储整个对象?

PHP memcache - store whole objects?

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

$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');

谢谢!

好吧,这取决于您实际使用了多少个单独的键。因此,例如,如果您每次访问页面时都使用 100 个键,那么执行多重请求比获取这么大的对象更有意义。

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

此外,如果您的翻译对象小至 25B,您可以进行一些优化以在内存缓存中存储更多对象。你可以看看这个link

您可以阅读 this 以更好地了解内存缓存的内部结构