Что такое расширение APCu для пользовательского кэширования в PHP?

Просто вопрос, связанный с OPcache, потому что я его не понял и нашел ответ в Google:

Когда мы говорим о кэшировании пространства пользователя, что это значит? Я знаю, что PHP предварительно поставляется с новым расширением Zend OPcache и что это расширение кэширует операционный код в оперативной памяти, чтобы не слишком нагружать процессор, который должен преобразовывать в операционный код исходный код PHP при каждом запросе, но как насчет APCu, когда говорят, что он реализует кеширование юзерленда?

Что такое кэширование пользовательского пространства? Можно ли держать APCu и Zend OPcache вместе или нет? Следует ли использовать Zend OPcache вместо APCu?


person tonix    schedule 29.11.2014    source источник


Ответы (1)


APCu действительно был разработан Джо Уоткинсом в ответ на OPcache. APC поддерживает как кэширование кодов операций, так и кэширование данных, но, начиная с PHP 5.4, сталкивается с проблемами стабильности при поддержке кэширования кодов операций. После того, как Zend Inc открыл исходный код Opcache и разместил его под лицензией PHP, он стал основным и предпочтительным кешем кода операции из PHP 5.5. Но он поддерживает только кэширование кода операции, а не кэширование данных.

APCu Джо, по сути, является урезанной версией APC, которая включает только код кэширования данных и предназначена для использования вместе с OpCache, если вам нужно кэширование данных.

Обратите внимание, что кэширование кода операции прозрачно на уровне исходного кода, а кэширование данных — нет. Ваше приложение должно быть закодировано явно, чтобы использовать его. (Хотя стандартные приложения PHP, такие как Wordpress, Drupal, phpBB, MediaWiki,... включают эту поддержку по умолчанию).

person TerryE    schedule 30.11.2014
comment
Таким образом, APCu реализует функцию кэширования данных в памяти, такую ​​​​как система кэширования Memcached? Я прав? - person tonix; 30.11.2014
comment
Аналогично, но отличается тем, что Memcached находится вне процесса и поддерживает RPC, поэтому является кластеризуемым и по сути более масштабируемым, хотя и с большими накладными расходами на вызов. APCu использует разделяемую область памяти и библиотеку спин-блокировок PostgreSQL, поэтому большинство вызовов API находятся в процессе без ожидания, поэтому они чрезвычайно легковесны, но не масштабируются за пределами сервера. - person TerryE; 01.12.2014
comment
Спасибо за ответ и объяснение! - person tonix; 02.12.2014
comment
Спин-блокировки — это вариант, а не вариант по умолчанию. rwlocks по умолчанию, мьютекс откат к этому, спин-блокировки откат для обработки общего мьютекса. - person Joe Watkins; 05.12.2014
comment
Спасибо за разъяснение Джо. Я отвечал по памяти. Вы используете pthread rwlocks, если pthreads доступен, а не резервный код PostgreSWL. В любом случае общий комментарий о том, что большинство вызовов API находятся в процессе без ожидания, поэтому они чрезвычайно легки, но не масштабируются за пределами сервера, по-прежнему применим :) - person TerryE; 06.12.2014
comment
Ваше приложение должно быть закодировано явно, чтобы использовать его. Это немного похоже на магию. Насколько я понимаю, APCu Cache должен быть установлен как расширение PECL. Функции APCu могут использоваться для сохранения (кеширования) и загрузки значений по ключам: apcu_add('foo', $bar) ... apcu_fetch('foo') - person goulashsoup; 16.08.2019