Поскольку V9 относительно несовместим с предыдущими версиями, внимательно прочитайте руководство по переходу, чтобы обеспечить максимально плавный переход. Одним из самых больших изменений является система конфигурации, которая теперь представляет собой объект, заменяющий примитивный массив, который мы использовали тогда. Также обратите внимание, что для правильной работы V9 требуется PHP 8 или выше.
Дополнительная информация в Wiki. Простота абстракции: один класс для многих внутренних кэшей. Вам не нужно снова переписывать код много раз.
Не стесняйтесь предлагать драйвер, оформив новый запрос на включение , они приветствуются!
Постоянные водители | Высокопроизводительные драйверы | Драйверы развития (ядро) | Кластерно-агрегированные драйверы (ядро) |
---|---|---|---|
Apcu (Ядро)(поддержка APC удалена) | Arangodb (Расширение) | Devnull | FullReplicationCluster |
Dynamodb (Расширение) | Cassandra (Расширение PHP больше не поддерживается Datastax, может устареть в версии 10) | Devrandom | SemiReplicationCluster |
Files (ядро) | CouchBasev3 (Ядро)(Будет устаревшим, начиная с версии 10) | Memory (Ранее назывался Memstatic ) | MasterSlaveReplicationCluster |
Firestore (расширение) | CouchBasev4 (Расширение) | RandomReplicationCluster | |
Leveldb (ядро) | Couchdb (расширение) | ||
Memcache(d) (ядро) | Mongodb (расширение) | ||
Solr (Расширение) | Predis (Ядро) | ||
Sqlite (ядро) | Ravendb _(Расширение) | ||
Wincache (ядро)( Устарело с версии 9.2, будет удалено с версии 10) | Relay (к концу 2024 г.) | ||
Zend Disk Cache (ядро) | Redis / RedisCluster (ядро) | ||
Ssdb (ядро) | |||
Zend Memory Cache (ядро) |
* Описания драйверов доступны в DOCS/DRIVERS.md.
Начиная с версии 9.2 было выпущено новое расширение Couchbase: Couchbasev4. Также было добавлено новое расширение драйвера: Ravendb
. Драйвер будет активно дорабатываться для обеспечения более детальной настройки. Это новое расширение, наряду с некоторыми другими, является началом новой эры для Phpfastcache:
Многие драйверы были перенесены из ядра в собственный подрепозиторий в виде самостоятельного расширения: Arangodb
, Couchdb
, Dynamodb
, Firestore
, Mongodb
, Solr
.
Их можно легко добавить через композитор, например: composer install phpfastcache/couchbasev4-extension
Однако Couchbasev3
останется в ядре по соображениям совместимости, но будет устаревшим.
Phpfastcache разрабатывался на протяжении многих лет с тремя основными целями:
Phpfastcache предоставляет вам множество полезных API:
Метод | Возвращаться | Описание |
---|---|---|
addTag($tagName) | ExtendedCacheItemInterface | Добавляет тег |
addTags(array $tagNames) | ExtendedCacheItemInterface | Добавляет несколько тегов |
append($data) | ExtendedCacheItemInterface | Добавляет данные в строку или массив (push) |
decrement($step = 1) | ExtendedCacheItemInterface | Лишняя шутка... |
expiresAfter($ttl) | ExtendedCacheItemInterface | Позволяет продлить срок действия записи без изменения ее значения (ранее известное как touch()). |
expiresAt($expiration) | ExtendedCacheItemInterface | Устанавливает срок действия для этого элемента кэша (как объекта DateTimeInterface). |
get() | mixed | Геттер, очевидно, возвращает ваш объект кеша. |
getCreationDate() | DatetimeInterface | Получает дату создания этого элемента кэша (как объект DateTimeInterface) * |
getDataAsJsonString() | string | Верните данные в виде хорошо отформатированной строки JSON. |
getEncodedKey() | string | Возвращает окончательный и внутренний идентификатор элемента (ключ), обычно используемый в целях отладки. |
getExpirationDate() | ExtendedCacheItemInterface | Получает дату истечения срока действия в виде объекта Datetime. |
getKey() | string | Возвращает идентификатор элемента (ключ) |
getLength() | int | Получает длину данных, если данные представляют собой строку, массив или объекты, реализующие интерфейс Countable . |
getModificationDate() | DatetimeInterface | Получает дату изменения для этого элемента кэша (как объект DateTimeInterface) * |
getTags() | string[] | Получает теги |
hasTag(string $tagName) | bool | Проверьте, содержит ли элемент кэша один конкретный тег |
hasTags(array $tagNames, int $strategy): bool | bool | Проверьте, содержит ли элемент кэша один или несколько конкретных тегов с дополнительной стратегией (по умолчанию TAG_STRATEGY_ONE). |
isTagged(): bool | bool | Проверьте, имеет ли элемент кэша хотя бы один тег (v9.2). |
getTagsAsString($separator = ', ') | string | Получает данные в виде строки, разделенной разделителем $. |
getTtl() | int | Получает оставшееся время жизни в виде целого числа. |
increment($step = 1) | ExtendedCacheItemInterface | Чтобы мы могли рассчитывать на целочисленный элемент |
isEmpty() | bool | Проверяет, пусты ли данные или нет, несмотря на статус попадания/промаха. |
isExpired() | bool | Проверяет, истек ли срок действия вашей записи в кеше |
isHit() | bool | Проверяет, существует ли ваша запись в кэше и действительна ли она. Это эквивалент isset(). |
isNull() | bool | Проверяет, являются ли данные нулевыми или нет, несмотря на статус попадания/промаха. |
prepend($data) | ExtendedCacheItemInterface | Добавляет данные в строку или массив (отменить сдвиг) |
removeTag($tagName) | ExtendedCacheItemInterface | Удаляет тег |
removeTags(array $tagNames) | ExtendedCacheItemInterface | Удаляет несколько тегов |
set($value) | ExtendedCacheItemInterface | Для тех, кто пропустил, установщиком может быть что угодно, кроме ресурсов или объекта, не являющегося сериализатором (например, объекты PDO, указатели файлов и т. д.). |
setCreationDate($expiration) | DatetimeInterface | Устанавливает дату создания этого элемента кэша (как объекта DateTimeInterface) * |
setEventManager($evtMngr) | ExtendedCacheItemInterface | Устанавливает менеджер событий |
setExpirationDate() | ExtendedCacheItemInterface | Псевдоним expireAt() (для дополнительной логики кода) |
setModificationDate($expiration) | DatetimeInterface | Устанавливает дату изменения для этого элемента кэша (как объект DateTimeInterface) * |
setTags(array $tags) | ExtendedCacheItemInterface | Устанавливает несколько тегов |
* Требовать включения директивы конфигурации «itemDetailedDate», иначе будет выдано исключение LogicException. |
Методы (в алфавитном порядке) | Возвращаться | Описание |
---|---|---|
appendItemsByTag($tagName, $data) | bool | Добавляет элементы по тегу |
appendItemsByTags(array $tagNames, $data) | bool | Добавляет элементы по одному из нескольких имен тегов |
attachItem($item) | void | (Повторно) прикрепляет элемент к пулу |
clear() | bool | Позволяет полностью очистить кэш и начать работу с начала. |
commit() | bool | Сохраняет любые отложенные элементы кэша. |
decrementItemsByTag($tagName, $step = 1) | bool | Уменьшает элементы по тегу |
decrementItemsByTags(array $tagNames, $step = 1) | bool | Уменьшает элементы по одному из нескольких имен тегов |
deleteItem($key) | bool | Удаляет элемент |
deleteItems(array $keys) | bool | Удаляет один или несколько элементов |
deleteItemsByTag($tagName) | bool | Удаляет элементы по тегу |
deleteItemsByTags(array $tagNames, int $strategy) | bool | Удаляет элементы по одному из нескольких имен тегов |
detachItem($item) | void | Отключает элемент из пула |
getConfig() | ConfigurationOption | Возвращает объект конфигурации |
getConfigOption($optionName); | mixed | Возвращает значение конфигурации по ключу $optionName |
getDefaultConfig() | ConfigurationOption | Возвращает объект конфигурации по умолчанию (не измененный экземпляром объекта) |
getDriverName() | string | Возвращает текущее имя драйвера (без пространства имен) |
getEventManager() | EventManagerInterface | Получает менеджер событий |
getHelp() | string | Предоставляет очень простую помощь для конкретного драйвера. |
getInstanceId() | string | Возвращает идентификатор экземпляра |
getItem($key) | ExtendedCacheItemInterface | Извлекает элемент и возвращает пустой элемент, если не найден |
getItems(array $keys) | ExtendedCacheItemInterface[] | Извлекает один или несколько элементов и возвращает массив элементов. Начиная с версии 9.2, в этот метод было внесено внутреннее улучшение. |
getAllItems(string $pattern = '') | ExtendedCacheItemInterface[] | (v9.2) Извлекает все элементы кэша с жестким ограничением в 9999 элементов. Поддержка ограничена некоторыми драйверами |
getItemsAsJsonString(array $keys) | string | Возвращает Строку json, представляющую массив элементов. |
getItemsByTag($tagName, $strategy) | ExtendedCacheItemInterface[] | Возвращает элементы по тегу |
getItemsByTags(array $tagNames, $strategy) | ExtendedCacheItemInterface[] | Возвращает элементы по одному из нескольких имен тегов |
getItemsByTagsAsJsonString(array $tagNames, $strategy) | string | Возвращает Строку json, представляющую массив элементов, соответствующих |
getStats() | DriverStatistic | Возвращает статистику кэша в виде объекта, что полезно для проверки дискового пространства, используемого кэшем, и т. д. |
hasEventManager() | bool | Проверьте менеджер событий |
hasItem($key) | bool | Проверяет, существует ли элемент |
incrementItemsByTag($tagName, $step = 1, $strategy) | bool | Увеличивает элементы по тегу |
incrementItemsByTags(array $tagNames, $step = 1, $strategy) | bool | Увеличивает элементы по одному из нескольких имен тегов |
isAttached($item) | bool | Убедитесь, что элемент (все еще) прикреплен |
prependItemsByTag($tagName, $data, $strategy) | bool | Добавляет элементы в начало по тегу |
prependItemsByTags(array $tagNames, $data, $strategy) | bool | Добавляет элементы в начало по одному из нескольких имен тегов |
save(CacheItemInterface $item) | bool | Немедленно сохраняет элемент кэша |
saveDeferred(CacheItemInterface $item) | bool | Устанавливает элемент кэша, который будет сохранен позже |
saveMultiple(...$items) | bool | Немедленно сохраняет несколько элементов кэша |
setEventManager(EventManagerInterface $evtMngr) | ExtendedCacheItemPoolInterface | Устанавливает менеджер событий |
в V8 : теперь поддерживаются несколько стратегий ( $strategy
) для тегирования:
TaggableCacheItemPoolInterface::TAG_STRATEGY_ONE
позволяет получить элементы кэша по крайней мере по ОДНОМУ из указанных совпадающих тегов. Поведение по умолчанию.TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL
позволяет вам получить элементы кэша по ВСЕМ указанным совпадающим тегам (элемент кэша может иметь дополнительные теги))TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY
позволяет вам получать элементы кэша ТОЛЬКО по указанным совпадающим тегам (элемент кэша не может иметь дополнительные теги))Он также поддерживает несколько вызовов, тегирование, папку настройки для кэширования. Посмотрите наши папки с примерами для получения дополнительной информации.
Phpfastcache предоставляет класс, который предоставляет вам базовую информацию об установке Phpfastcache.
PhpfastcacheApi::GetVersion();
PhpfastcacheApi::getChangelog();
PhpfastcacheApi::getPhpfastcacheVersion();
PhpfastcacheApi::getPhpfastcacheChangelog();
Хорошие новости: начиная с V6, предусмотрен адаптер Psr16 для упрощения кэширования с использованием очень простых геттеров/сеттеров:
get($key, $default = null);
set($key, $value, $ttl = null);
delete($key);
clear();
getMultiple($keys, $default = null);
setMultiple($values, $ttl = null);
deleteMultiple($keys);
has($key);
Основное использование:
<?php
use Phpfastcache Helper Psr16Adapter ;
$ defaultDriver = ' Files ' ;
$ Psr16Adapter = new Psr16Adapter ( $ defaultDriver );
if (! $ Psr16Adapter -> has ( ' test-key ' )){
// Setter action
$ data = ' lorem ipsum ' ;
$ Psr16Adapter -> set ( ' test-key ' , ' lorem ipsum ' , 300 ); // 5 minutes
} else {
// Getter action
$ data = $ Psr16Adapter -> get ( ' test-key ' );
}
/**
* Do your stuff with $data
*/
Внутренне адаптер Psr16 вызывает Phpfastcache Api через менеджер кэша.
Начиная с версии V6, Phpfastcache предоставляет механизм событий. Вы можете подписаться на событие, передав замыкание активному событию:
<?php
use Phpfastcache EventManager ;
/**
* Bind the event callback
*/
EventManager:: getInstance ()-> onCacheGetItem ( function ( ExtendedCacheItemPoolInterface $ itemPool , ExtendedCacheItemInterface $ item ){
$ item -> set ( ' [HACKED BY EVENT] ' . $ item -> get ());
});
Обратный вызов события может быть отменен, но вы ДОЛЖНЫ предварительно указать имя обратного вызова:
<?php
use Phpfastcache EventManager ;
/**
* Bind the event callback
*/
EventManager:: getInstance ()-> onCacheGetItem ( function ( ExtendedCacheItemPoolInterface $ itemPool , ExtendedCacheItemInterface $ item ){
$ item -> set ( ' [HACKED BY EVENT] ' . $ item -> get ());
}, ' myCallbackName ' );
/**
* Unbind the event callback
*/
EventManager:: getInstance ()-> unbindEventCallback ( ' onCacheGetItem ' , ' myCallbackName ' );
Начиная с версии V8, вы можете просто подписаться на каждое событие Phpfastcache.
Более подробную информацию о реализации и мероприятиях можно найти на Wiki.
Начиная с версии V6, Phpfastcache предоставляет несколько помощников, упрощающих ваш код.
Пусть в будущем появится еще больше, не стесняйтесь внести свой вклад!
Посетите WIKI, чтобы узнать, как реализовать функцию кластеризации агрегированного кэша.
composer require phpfastcache/phpfastcache
<?php
use Phpfastcache CacheManager ;
use Phpfastcache Config ConfigurationOption ;
// Setup File Path on your config files
// Please note that as of the V6 .1 the "path" config
// can also be used for Unix sockets ( Redis , Memcache , etc )
CacheManager:: setDefaultConfig ( new ConfigurationOption ([
' path ' => ' /var/www/phpfastcache.com/dev/tmp ' , // or in windows "C:/tmp/"
]));
// In your class , function , you can call the Cache
$ InstanceCache = CacheManager:: getInstance ( ' files ' );
/**
* Try to get $products from Caching First
* product_page is "identity keyword";
*/
$ key = " product_page " ;
$ CachedString = $ InstanceCache -> getItem ( $ key );
$ your_product_data = [
' First product ' ,
' Second product ' ,
' Third product '
/* ... */
];
if (! $ CachedString -> isHit ()) {
$ CachedString -> set ( $ your_product_data )-> expiresAfter ( 5 ); //in seconds , also accepts Datetime
$ InstanceCache -> save ( $ CachedString ); // Save the cache item just like you do with doctrine and entities
echo ' FIRST LOAD // WROTE OBJECT TO CACHE // RELOAD THE PAGE AND SEE // ' ;
echo $ CachedString -> get ();
} else {
echo ' READ FROM CACHE // ' ;
echo $ CachedString -> get ()[ 0 ]; // Will print ' First product'
}
/**
* use your products here or return them;
*/
echo implode ( ' <br /> ' , $ CachedString -> get ()); // Will echo your product list
Для любопытных разработчиков здесь доступно множество других примеров.
Нашли проблему или есть идея? Приходите сюда и дайте нам знать!