เนื่องจาก V9 เข้ากันไม่ได้กับเวอร์ชันก่อน หน้า โปรดอ่านคู่มือการย้ายอย่างละเอียดเพื่อให้แน่ใจว่าการย้ายจะราบรื่นที่สุดเท่าที่จะเป็นไปได้ การเปลี่ยนแปลงที่ใหญ่ที่สุดประการหนึ่งคือระบบการกำหนดค่าซึ่งขณะนี้เป็นอ็อบเจ็กต์ที่แทนที่อาร์เรย์ดั้งเดิมที่เราใช้ในการนำไปใช้ในตอนนั้น นอกจากนี้ โปรดทราบว่า V9 ต้องใช้ PHP 8 ขึ้นไปจึงจะทำงานได้อย่างถูกต้อง
ข้อมูลเพิ่มเติมใน Wiki ความเรียบง่ายของนามธรรม: คลาสเดียวสำหรับแคชแบ็กเอนด์จำนวนมาก คุณไม่จำเป็นต้องเขียนโค้ดซ้ำหลายครั้งอีก
อย่าลังเลที่จะเสนอคนขับโดยการสร้าง Pull Request ใหม่ ยินดีต้อนรับ!
คนขับประจำ | ไดรเวอร์ประสิทธิภาพสูง | ตัวขับเคลื่อนการพัฒนา (Core) | ไดรเวอร์แบบรวมคลัสเตอร์ (คอร์) |
---|---|---|---|
Apcu (คอร์)(การสนับสนุน APC ถูกลบออก) | Arangodb (ส่วนขยาย) | Devnull | FullReplicationCluster |
Dynamodb (ส่วนขยาย) | Cassandra (ส่วนขยาย PHP ไม่ได้รับการดูแลโดย Datastax อีกต่อไป อาจเลิกใช้แล้วในเวอร์ชัน 10) | Devrandom | SemiReplicationCluster |
Files (คอร์) | CouchBasev3 (คอร์)(จะเลิกใช้งานตั้งแต่ v10) | Memory (เดิมชื่อ Memstatic ) | MasterSlaveReplicationCluster |
Firestore (ส่วนขยาย) | CouchBasev4 (ส่วนขยาย) | RandomReplicationCluster | |
Leveldb (คอร์) | Couchdb (ส่วนขยาย) | ||
Memcache(d) (คอร์) | Mongodb (ส่วนขยาย) | ||
Solr (ส่วนขยาย) | Predis (คอร์) | ||
Sqlite (คอร์) | Ravendb _ (ส่วนขยาย) | ||
Wincache (คอร์)( เลิกใช้แล้ว ตั้งแต่เวอร์ชัน 9.2 จะถูกลบออกตั้งแต่เวอร์ชัน 10) | Relay (ภายในสิ้นปี 2567) | ||
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 เช่น 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 | เห็นได้ชัดว่าทะเยอทะยานส่งคืนวัตถุแคชของคุณ |
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 | รับ Time To Live ที่เหลือเป็นจำนวนเต็ม |
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 | นามแฝงของ expirAt() (สำหรับตรรกะโค้ดเพิ่มเติม) |
setModificationDate($expiration) | DatetimeInterface | ตั้งค่าวันที่แก้ไขสำหรับรายการแคชนี้ (เป็นวัตถุ DateTimeInterface) * |
setTags(array $tags) | ExtendedCacheItemInterface | ตั้งค่าหลายแท็ก |
* จำเป็นต้องมีคำสั่งการกำหนดค่า "itemDetailedDate" เพื่อเปิดใช้งาน มิฉะนั้น LogicException จะถูกส่งออกไป |
วิธีการ (ตามลำดับตัวอักษร) | กลับ | คำอธิบาย |
---|---|---|
appendItemsByTag($tagName, $data) | bool | ผนวกรายการด้วยแท็ก |
appendItemsByTags(array $tagNames, $data) | bool | ผนวกรายการด้วยชื่อแท็กชื่อใดชื่อหนึ่ง |
attachItem($item) | void | (Re-) แนบไอเท็มเข้ากับพูล |
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 | ส่งกลับชื่อไดรเวอร์ปัจจุบัน (โดยไม่ต้อง namespace) |
getEventManager() | EventManagerInterface | รับผู้จัดการเหตุการณ์ |
getHelp() | string | ให้ความช่วยเหลือขั้นพื้นฐานสำหรับไดรเวอร์เฉพาะ |
getInstanceId() | string | ส่งกลับ ID อินสแตนซ์ |
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 มีไว้เพื่อให้แคชง่ายที่สุดโดยใช้ getters/setters พื้นฐาน:
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
ในเวอร์ชัน 6 นั้น 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
สำหรับนักพัฒนาที่อยากรู้อยากเห็น มีตัวอย่างอื่นๆ อีกมากมายที่นี่
พบปัญหาหรือมีความคิด? มา ที่นี่ และแจ้งให้เราทราบ!