PHP: apc_store не работает, как предназначено

Я начал пробовать APC, чтобы хранить некоторые определенные данные на каждом веб-сервере как дополнение к memcached.

Однако следующая часть кода дает мне головные боли:

echo apc_store('key', 'value');
echo apc_store('key', 'newvalue');
echo apc_fetch('key'); 

// Echoes: value

Пример Memcached:

$memcached = new Memcached;

$memcached->addServer('localhost', '11211');

$memcached->set('key', 'value1');
echo $memcached->get('key') . '
'; // Echoes value1 $memcached->set('key', 'value2'); echo $memcached->get('key'). '
'; // Echoes value2 $memcached->set('key', 'value3'); echo $memcached->get('key'). '
'; // Echoes value3

Почему apc_store не работает как правильно?

Править: Чтобы удостовериться, что никто больше не проводит два часа на поиск решения, когда это вызывается ошибкой, вот, тот: http://pecl.php.net/bugs/bug.php?id=16894&edit=1 (не самое эффективное, хотя)

8
задан Industrial 26 May 2010 в 20:09
поделиться

1 ответ

Кажется, это известная проблема: Ошибка PECL # 16814 Новое предупреждение «Предотвращено возможное захлопывание кеша для ключа»

Похоже, что на запрос разрешен только один apc_store () . Я попробовал этот тест:

<?php

echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n";
// echo "<p>apc_store(value): " . apc_store('key', 'value') . "</p>\n";
echo "<p>apc_store(newvalue): " . apc_store('key', 'newvalue') . "</p>\n";
echo "<p>apc_fetch(key): " . apc_fetch('key') . "</p>\n";

Поиграйте с этим, не комментируйте вторую строку и убедитесь, что она перезаписывает ключ, установленный в предыдущем запросе, но вы можете сохранить данный ключ только один раз за запрос.

В журнале ошибок упоминается параметр ini-файла apc.slam_defense , который при установке на Выкл. может отключить эту функцию однократной записи. Но я попробовал это ненадолго и не смог подтвердить, что это работает. Возможно, вам повезет больше (не забудьте перезапустить Apache при изменении php.ini).

8
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: