91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中另一個高效緩存擴展Yac的示例分析

發布時間:2021-06-04 09:43:56 來源:億速云 閱讀:226 作者:小新 欄目:編程語言

這篇文章主要介紹了PHP中另一個高效緩存擴展Yac的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

PHP的另一個高效緩存擴展:Yac

之前的文章中我們已經學習過一個 PHP 自帶的擴展緩存 Apc ,今天我們來學習另一個緩存擴展:Yac 。

什么是 Yac

從名字其實就能看出,這又是鳥哥大神的作品。畢竟是 PHP 的核心開發人員,他的作品每次都不會讓我們失望。鳥哥可以說是我們中國程序員的驕傲,他在 PHP 界有舉足輕重的地位,大家可以自己搜索一下他的博客,雖說更新頻率不高,但每篇文章都值得我們學習。

Yac 是一個無鎖共享緩存系統,因為無鎖,所以它的效率非常高。據說 Apc 的效率是 Memcached 的一倍以上,而 Yac 比 Apc 更快。這就是它最大的特點。

相對于 Memcached 或者 Redis 來說,Yac 更加輕量級,我們也不需要在服務器中再安裝別的什么軟件,只需要安裝這個擴展就可以使用。對于小型系統特別是就是簡單的進行數據緩存的系統來說,我們不需要復雜的數據類型,只用這種程序語言的擴展就能讓我們的開發更為方便快捷。

安裝的方式也非常簡單,一樣的在 PECL 下載安裝包后進行擴展安裝即可。

基本操作

對于緩存相關的操作,無外乎就是添加、修改、刪除緩存。不像外部緩存系統,在保存數組或對象時,PHP 擴展類的緩存都能直接保存這些數據類型,而不用序列化為字符串或者轉化為 JSON 字符串,這是 Apc 和 Yac 的優勢之一。

添加、獲取緩存

$yac = new Yac();
$yac->add('a', 'value a');
$yac->add('b', [1,2,3,4]);

$obj = new stdClass;
$obj->v = 'obj v';
$yac->add('obj', $obj);


echo $yac->get('a'), PHP_EOL; // value a
echo $yac->a, PHP_EOL; // value a


print_r($yac->get('b'));
// Array
// (
//     [0] => 1
//     [1] => 2
//     [2] => 3
//     [3] => 4
// )

var_dump($yac->get('obj'));
// object(stdClass)#3 (1) {
//     ["v"]=>
//     string(5) "obj v"
// }

非常簡單的操作,我們只需要實例化一個 Yac 類,就可以通過 add() 方法及 get() 方法添加和獲取緩存內容。

Yac 擴展還重寫了 __set() 和 __get() 魔術方法,所以我們可以直接通過操作變量的方式來操作緩存。

接下來,我們可以通過 info() 函數查看當前緩存的狀態信息。

print_r($yac->info());
// Array
// (
//     [memory_size] => 71303168
//     [slots_memory_size] => 4194304
//     [values_memory_size] => 67108864
//     [segment_size] => 4194304
//     [segment_num] => 16
//     [miss] => 0
//     [hits] => 4
//     [fails] => 0
//     [kicks] => 0
//     [recycles] => 0
//     [slots_size] => 32768
//     [slots_used] => 3
// )

設置緩存

$yac->set('a', 'new value a!');
echo $yac->a, PHP_EOL; // new value a!

$yac->a = 'best new value a!';
echo $yac->a, PHP_EOL; // best new value a!

set() 函數的作用就是如果當前緩存 key 存在,就修改這個緩存的內容,如果不存在,就創建一個緩存。

刪除緩存

$yac->delete('a');
echo $yac->a, PHP_EOL; // 

$yac->flush();
print_r($yac->info());
// Array
// (
//     [memory_size] => 71303168
//     [slots_memory_size] => 4194304
//     [values_memory_size] => 67108864
//     [segment_size] => 4194304
//     [segment_num] => 16
//     [miss] => 1
//     [hits] => 6
//     [fails] => 0
//     [kicks] => 0
//     [recycles] => 0
//     [slots_size] => 32768
//     [slots_used] => 0
// )

對于單個緩存的刪除,我們可以直接使用 delete() 函數來刪除這個緩存的內容。如果要清空整個緩存空間,就可以直接使用 flush() 來清空整個緩存空間。

別名空間

上面我們提到了 緩存空間 這個東西。其實也就是在實例化 Yac 的時候可以給默認的 Yac 類構造函數傳遞一個別名配置。這樣,不同的 Yac 實例就相當于放在了不同的命名空間中,相同的 Key 的緩存在不同的空間中就不會相互影響。

$yacFirst = new Yac();
$yacFirst->a = 'first a!';;

$yacSecond = new Yac();
$yacSecond->a = 'second a!';

echo $yacFirst->a, PHP_EOL; // second a!
echo $yacSecond->a, PHP_EOL; // second a!

這段代碼我們都是使用的默認的實例化 Yac 對象,雖說是分開實例化的,但它們保存的空間是一樣的,所以相同的 a 變量會相互覆蓋。

$yacFirst = new Yac('first');
$yacFirst->a = 'first a!';;

$yacSecond = new Yac('second');
$yacSecond->a = 'second a!';

echo $yacFirst->a, PHP_EOL; // first a!
echo $yacSecond->a, PHP_EOL; // second a!

當我們使用不同的實例化參數之后,相同的 a 就不會相互影響,它們被存儲在了不同的空間中。或者說,Yac 會自動給這些 Key 增加一個 prefix 。

緩存時效

最后,緩存系統都會針對緩存內容有時效限制,如果指定了過期時間,緩存內容就會在指定的時間之后過期。

$yac->add('ttl', '10s', 10);
$yac->set('ttl2', '20s', 20);
echo $yac->get('ttl'), PHP_EOL; // 10s
echo $yac->ttl2, PHP_EOL; // 20s

sleep(10);

echo $yac->get('ttl'), PHP_EOL; // 
echo $yac->ttl2, PHP_EOL; // 20s

上述代碼中的 ttl 緩存只設置了 10 秒的過期時間,所以在 sleep() 10 秒后,輸出 ttl 就沒有任何內容了。

需要注意的是,對于時間的設置,如果不設置的話就是長久有效,而且不能用 __set() 方法設置過期時間,只能使用 set() 或者 add() 函數來設置過期時間。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“PHP中另一個高效緩存擴展Yac的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

祁门县| 榕江县| 密云县| 德令哈市| 宜州市| 武宁县| 博兴县| 桃江县| 烟台市| 辉南县| 大关县| 古田县| 体育| 湖北省| 疏附县| 桐城市| 开远市| 杭锦后旗| 马关县| 广宗县| 肥西县| 冷水江市| 台安县| 昌乐县| 泸定县| 西宁市| 会理县| 怀化市| 济源市| 铁力市| 赤壁市| 哈尔滨市| 内丘县| 连山| 车险| 镇原县| 大英县| 武城县| 西贡区| 潼南县| 隆尧县|