由於V9與先前版本的兼容性相對較差,請仔細閱讀遷移指南,以確保您能夠最順利地遷移。最大的變化之一是配置系統,它現在是一個對象,取代了我們當時用來實現的原始數組。另請注意,V9 至少需要 PHP 8 或更高版本才能正常運作。
更多資訊請參閱 Wiki 抽象的簡單性:一個類別可用於多個後端快取。您不需要多次重寫程式碼。
請隨意透過提出新的Pull 請求來推薦一名驅動程序,我們歡迎他們!
普通司機 | 高性能驅動器 | 開發驅動(核心) | 叢集聚合驅動程式(核心) |
---|---|---|---|
Apcu (核心)(APC 支援已移除) | Arangodb (擴充) | Devnull | FullReplicationCluster |
Dynamodb (擴充) | Cassandra (Datastax 不再維護 PHP 擴展,可能會在 v10 中棄用) | Devrandom | SemiReplicationCluster |
Files (核心) | CouchBasev3 (核心)(從 v10 開始將被棄用) | Memory (以前稱為 Memstatic ) | MasterSlaveReplicationCluster |
Firestore (擴充) | CouchBasev4 (擴展) | RandomReplicationCluster | |
Leveldb (核心) | Couchdb (擴充) | ||
Memcache(d) (核心) | Mongodb (擴充) | ||
Solr (擴充) | Predis (核心) | ||
Sqlite (核心) | Ravendb _(擴充) | ||
Wincache (核心)(自 v9.2 起已棄用,自 v10 起將刪除) | Relay (2024 年底前) | ||
Zend Disk Cache (核心) | Redis / RedisCluster (核心) | ||
Ssdb (核心) | |||
Zend Memory Cache (核心) |
* 驅動程式描述可在 DOCS/DRIVERS.md 中找到
從 v9.2 開始,發布了新的 Couchbase 擴充功能: Couchbasev4 還新增了新的驅動程式擴充功能: Ravendb
。驅動程式將在該功能中積極開發,以實現更好的細粒度配置。這個新擴充是 Phpfastcache 和其他一些擴展新時代的開始:
許多驅動程式已作為獨立擴充功能從核心移至自己的子儲存庫: Arangodb
、 Couchdb
、 Dynamodb
、 Firestore
、 Mongodb
、 Solr
。
它們可以透過composer輕鬆添加,例如: composer install phpfastcache/couchbasev4-extension
但是,出於相容性原因, Couchbasev3
將保留在核心中,但將被棄用。
Phpfastcache 已開發多年,主要目標有 3 個:
Phpfastcache 為您提供了許多有用的 API:
方法 | 返回 | 描述 |
---|---|---|
addTag($tagName) | ExtendedCacheItemInterface | 添加標籤 |
addTags(array $tagNames) | ExtendedCacheItemInterface | 新增多個標籤 |
append($data) | ExtendedCacheItemInterface | 將資料追加到字串或陣列(推送) |
decrement($step = 1) | ExtendedCacheItemInterface | 多餘的笑話... |
expiresAfter($ttl) | ExtendedCacheItemInterface | 允許您延長條目的生命週期而不改變其值(以前稱為 touch()) |
expiresAt($expiration) | ExtendedCacheItemInterface | 設定此快取項目的過期時間(作為 DateTimeInterface 物件) |
get() | mixed | 顯然,getter 回傳你的快取對象 |
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 | 取得以 $separator 分隔的字串形式的數據 |
getTtl() | int | 取得整數形式的剩餘存活時間 |
increment($step = 1) | ExtendedCacheItemInterface | 讓我們可以依賴一個整數項 |
isEmpty() | bool | 儘管命中/未命中狀態,仍檢查資料是否為空。 |
isExpired() | bool | 檢查您的快取條目是否過期 |
isHit() | bool | 檢查你的快取條目是否存在並且仍然有效,它相當於 isset() |
isNull() | bool | 儘管存在命中/未命中狀態,但仍檢查資料是否為空。 |
prepend($data) | ExtendedCacheItemInterface | 將資料新增至字串或陣列(unshift) |
removeTag($tagName) | ExtendedCacheItemInterface | 刪除標籤 |
removeTags(array $tagNames) | ExtendedCacheItemInterface | 刪除多個標籤 |
set($value) | ExtendedCacheItemInterface | 對於錯過它的人來說,setter 可以是資源或非序列化器物件(例如: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 | 傳回實例 ID |
getItem($key) | ExtendedCacheItemInterface | 檢索項目並在未找到時返回空項目 |
getItems(array $keys) | ExtendedCacheItemInterface[] | 檢索一個或多個項目並傳回一組項目。從 v9.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 適配器,以使用非常基本的 getter/setter 來保持快取最簡單:
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提供了事件機制。您可以透過將 Closure 傳遞給活動事件來訂閱事件:
<?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
對於好奇的開發人員,這裡還有很多其他範例。
發現問題或有想法?來這裡讓我們知道!