1. 程式人生 > >PHP規範PSR16(快取庫的通用介面)介紹

PHP規範PSR16(快取庫的通用介面)介紹

本文件描述了快取項和快取驅動程式的簡單但可擴充套件的介面。

本文件中的關鍵詞“必須”,“必須”,“必需”,“應該”,“不應該”,“應該”,“不應該”,“推薦”,“可以”和“可選”按照RFC 2119中的描述進行解釋。

最終的實現可以使用比提出的功能更多的功能來裝飾物件,但是它們必須首先實現所指示的介面/功能。

1 介紹

快取是提高任何專案效能的常用方法,使快取庫成為許多框架和庫的最常見功能之一。此級別的互操作性意味著庫可以刪除自己的快取實現,並且可以輕鬆地依賴於框架或其他專用快取庫給予它們的實現。

PSR-6已經解決了這個問題,但是以一種相當正式和冗長的方式解決了最簡單的用例所需要的問題。這種更簡單的方法旨在為常見情況構建標準化的簡化介面。它獨立於PSR-6,但設計為儘可能簡單地與PSR-6相容。

2 定義

呼叫庫,實現庫,TTL,到期和金鑰的定義從PSR-6複製,因為相同的假設是正確的。

(1)呼叫庫 - 實際需要快取服務的庫或程式碼。該庫將利用實現此標準介面的快取服務,但不會知道這些快取服務的實現。

(2)實現庫 - 該庫負責實現此標準,以便為任何呼叫庫提供快取服務。實現庫必須提供一個實現Psr \ SimpleCache \ CacheInterface介面的類。實現庫必須支援至少TTL功能,如下所述,具有全秒級粒度。

(3)TTL - 專案的生存時間(TTL)是該專案儲存與被認為是陳舊之間的時間量。 TTL通常由表示以秒為單位的時間的整數或DateInterval物件定義。

(4)到期 - 專案設定為失效的實際時間。這是通過將TTL新增到儲存物件的時間來計算的。在1:30:00儲存300秒TTL的專案將到期為1:35:00。實現庫可以在其請求的到期時間之前使專案到期,但是一旦達到其到期時間,必須將專案視為已過期。如果呼叫庫要求儲存專案但未指定過期時間,或指定空過期時間或TTL,則實現庫可以使用配置的預設持續時間。如果沒有設定預設持續時間,則實現庫必須將其解釋為永久快取專案的請求,或者只要底層實現支援。如果提供了負TTL或零TTL,則必須從快取中刪除該項(如果存在),因為它已經過期。

(5)Key - 至少一個字元的字串,用於唯一標識快取的專案。實現庫必須支援由字元A-Z,a-z,0-9,_和組成的鍵。以UTF-8編碼的任何順序,長度最多為64個字元。實現庫可以支援其他字元和編碼或更長的長度,但必須至少支援該最小值。庫負責自己的金鑰字串轉義,但必須能夠返回原始未修改的金鑰字串。以下字元保留用於將來的擴充套件,並且實現庫不得支援:{}()/ \ @:

(6)Cache

- 實現Psr \ SimpleCache \ CacheInterface介面的物件。

(7)快取記憶體未命中 - 快取記憶體未命中將返回null,因此檢測是否存在一個儲存的空值。這是PSR-6假設的主要偏差。

3 Cache

實現可以為使用者提供一種機制,以指定預設TTL(如果沒有為特定快取項指定TTL)。如果沒有提供使用者指定的預設值,則實現必須預設為底層實現允許的最大合法值。如果底層實現不支援TTL,則必須靜默忽略使用者指定的TTL。

4 資料

實現庫必須支援所有可序列化的PHP資料型別,包括:

  • 字串 - 任何PHP相容編碼中任意大小的字串。
  • 整數 - PHP支援的任何大小的所有整數,最多64位簽名。
  • 浮點數 - 所有帶符號的浮點值。
  • 布林值 - 真和假。
  • Null - 空值(儘管在讀取它時它不能與快取記憶體未命中區分)。
  • 陣列 - 任意深度的索引,關聯和多維陣列。
  • Object - 支援無損序列化和反序列化的任何物件,以便$ o == unserialize(serialize($ o))。物件可以使用PHP的Serializable介面,__sleep()或__wakeup()魔術方法,或者適當的類似語言功能。

傳遞到實現庫的所有資料必須完全按照傳遞的方式返回。這包括變數型別。也就是說,返回(字串)5是錯誤的,如果(int)5是儲存的值。實現庫可以在內部使用PHP的serialize()/ unserialize()函式,但不是必須這樣做。與它們的相容性僅用作可接受物件值的基線。

如果由於任何原因無法返回確切的儲存值,則實現庫必須以快取未命中而不是損壞的資料進行響應。