我們也有自帶的快取系統 PHP的APCu擴充套件

2021-10-07 22:05:57 字數 1906 閱讀 8884

想必大家都使用過 memcached 或者 redis 這類的快取系統來做日常的快取,或者用來抗流量,或者用來儲存一些常用的熱點資料,其實在小專案中,php 也已經為我們準備好了一套簡單的快取系統,完全能夠應付我們日常普通規模站點的開發。這一套擴充套件就是 apcu 擴充套件。

apcu 擴充套件是 apc 擴充套件的公升級,apc 擴充套件已經不維護了。這兩套擴充套件其實都是基於 opcode caching 。也就是 php 自身的 opcode 來實現的快取能力。

快取系統一般都會有的增加、刪除、查詢、自增等功能都在 apcu 擴充套件中有對應的實現。

apcu_add("int", 1);

apcu_add("string", "i'm string");

apcu_add("arr", [1,2,3]);

class a

}apcu_add("obj", new a);

var_dump(apcu_fetch("int"));

var_dump(apcu_fetch("string"));

var_dump(apcu_fetch("arr"));

var_dump(apcu_fetch("obj"));

正常的使用都是比較簡單的,我們新增各種型別的資料都可以正常存入快取。不過需要注意的是,我們可以直接儲存物件進入 apcu 快取中,不需要將它序列化或者json成字串,系統會自動幫我們序列化。

apcu_add(string $key , mixed $var [, int $ttl = 0 ]) 方法就是普通的新增乙個快取,$ttl 可以設定過期時間,也是以秒為單位,如果不設定就是長期有效的。注意,apcu 的快取時限在一次 cli 中有效,再呼叫一次 cli 取不到上次 cli 中設定的快取內容。而在 php-fpm 中,重啟 php-fpm 或 fastcgi 之後快取會失效。

接下來我們重點測試一下幾個不太常見的方法。

apcu_cas("int", 1, 2);

var_dump(apcu_fetch("int"));

// warning  apcu_cas() expects parameter 2 to be int

apcu_cas("string", "i'm string", "i'm  new string");

apcu_cas(string $key , int $old , int $new) 是將乙個 $old 值修改為 $new 值,它只能修改數字型別的內容,如果是字串的修改會報錯。這個函式有什麼優勢呢?它最大的優勢是原子性的,也就是不受高併發的影響。與之類似的是 apcu_store(string $key , mixed $var [, int $ttl = 0 ]) 方法,不過這個方法只是簡單的修改乙個快取的內容,如果這個快取的鍵不存在的話,就新建乙個,它不受型別的限制,當然也不具有原子性。

apcu_entry("entry", function($key));

var_dump(apcu_fetch("entry"));

apcu_entry(string $key , callable $generator [, int $ttl = 0 ]) 這個函式的作用是如果 $key 這個快取不存在,則執行 $generator 這個匿名函式,並將 $key 做為鍵值傳遞進去,然後生成也就是 return 乙個內容做為這個快取的值。

var_dump(apcu_cache_info());
最後,如果我們想檢視當前系統中的所有 apcu 快取資訊的時候,直接用這個 apcu_cache_info() 函式即可。

當快取中的資料非常多時,它還提供了乙個 apcuiterator 迭代器方便我們進行快取資訊的迴圈查詢及相關統計。總之,這一套系統是非常方便的一套小規模的快取系統,在日常開發中完全可以嘗試用到一些小功能上。

測試**:

php自帶的快取擴充套件 APCu

在很多業務中,咱們都會碰到需要快取資料的時候,而快取方案有很多,也可以借助redis,memcache等第三方來進行快取 本文主要講解apcu擴充套件的快取 php.ini需要配置 extension php apcu.dll apc.enabled 1 apc.shm size 32m apc.e...

python 自帶的 記憶體快取

python標準庫中的functools模組,提供了functools.lru cache,基於記憶體的快取。基於記憶體快取 lru cache from functools import lru cache lru cache maxsize 1 defsum2 a,b print f 計算 re...

Yii的自帶快取的使用

yii的自帶快取都繼承ccache 類,在使用上基本沒有區別 快取基礎類 ccache 提供了兩個最常用的方法 set 和 get 要在快取中儲存變數 value,我們選擇乙個唯一 id 並呼叫 set 來儲存它 被快取的資料會一直保留在快取中,直到因一些快取策略而被刪除 比如快取空間滿了,刪除最舊...