想必大家都使用過 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 來儲存它 被快取的資料會一直保留在快取中,直到因一些快取策略而被刪除 比如快取空間滿了,刪除最舊...