Memcache php cli против apache с использованием разных кешей? - PullRequest
4 голосов
/ 16 января 2012

Пытался найти этот ответ повсюду, но ударился о стену.

Код: (сохранен как Recent.php)

$MEMCACHE_SERVERS = array(
    "1.2.3.4", //db prodmaster
    "5.6.7.8",  //db prodslave1
    "9.10.11.12" //db1 dev
);

$memcache = new Memcache();
foreach($MEMCACHE_SERVERS as $server){
    $memcache->addServer($server,11211);
}
$key = "rec_obj_".$cat_id;
$memcache->delete($key);
$memcache->set($key, $objects, MEMCACHE_COMPRESSED, $time=60*60*4);

Приведенный выше код, почему он обращается к различным кэшампри запуске из Cli против Apache?Когда я запускаю php /var/www/localhost/htdocs/url/recent.php из командной строки, он работает отлично, но затем я не могу получить данные с моего сайта через $ memcache-> get ($ key).И наоборот, когда я запускаю тот же скрипт из веб-браузера http://www.url.com/recent.php, он работает отлично, но его нельзя найти из командной строки?Результаты командной строки memcache можно найти с помощью запуска $ memcache-> get ($ key) в командной строке, результаты поиска в веб-браузере можно найти через $ memcache-> get ($ key) из веб-браузера.Кэши CLI и Web, кажется, разделены, как я могу это исправить?

Я проверил свой phpinfo (), оба php-apache2 и php-cli имеют extension = memcache.so.Кроме того, я подумал, что это может быть разницей в хешах, но оба говорят:

Directive               Local Value Master Value
memcache.allow_failover 1   1
memcache.chunk_size 8192    8192
memcache.default_port   11211   11211
memcache.default_timeout_ms 1000    1000
memcache.hash_function  crc32   crc32
memcache.hash_strategy  consistent  consistent
memcache.max_failover_attempts  100 100

Также пытались вывести состояние и проверить $ memcache-> getExtendedStats ();из команды и веб-браузера.Оба показывают все 3 сервера.Однако некоторые значения различаются, например, curr_items или reclaimed, но отключены на 10 или около того.

Чувствую, что я что-то упустил ... Я мог бы обойти и просто сохранить данные в таблицу MySQL, но это не ответит на вопрос, почему это происходит.

Я пытался предоставить всю информацию, которая, по моему мнению, необходима, но не стесняйтесь просить разъяснений.

1 Ответ

1 голос
/ 05 апреля 2012

Когда вы запускаете CLI PHP, вы запускаете его как пользователь.Когда вы обращаетесь к нему через Apache, он запускается как пользователь apache (www-data или аналогичный).memcached действительно заботится о вашем имени пользователя, он создаст разные кеши для разных пользователей.Таким образом, у вас есть два совершенно разных кэша.

Вы можете перечислить эти кэши, используя sudo ipcs в Linux, смотрите в разделе Shared Memory Segments.Проверьте столбец «владелец», вы, вероятно, увидите оба.Я лично разрешаю это, запустив свой CLI PHP от имени пользователя www-data:

sudo su www-data -c "php lawl.php"
...