PHP的另一個(gè)高效緩存擴(kuò)展:Yac之前的文章中我們已經(jīng)學(xué)習(xí)過(guò)一個(gè) PHP 自帶的擴(kuò)展緩存 Apc ,今天我們來(lái)學(xué)習(xí)另一個(gè)緩存擴(kuò)展:Yac 。 什么是 Yac從名字其實(shí)就能看出,這又是鳥哥大神的作品。畢竟是 PHP 的核心開發(fā)人員,他的作品每次都不會(huì)讓我們失望。鳥哥可以說(shuō)是我們中國(guó)程序員的驕傲,他在 PHP 界有舉足輕重的地位,大家可以自己搜索一下他的博客,雖說(shuō)更新頻率不高,但每篇文章都值得我們學(xué)習(xí)。 Yac 是一個(gè)無(wú)鎖共享緩存系統(tǒng),因?yàn)闊o(wú)鎖,所以它的效率非常高。據(jù)說(shuō) Apc 的效率是 Memcached 的一倍以上,而 Yac 比 Apc 更快。這就是它最大的特點(diǎn)。 相對(duì)于 Memcached 或者 Redis 來(lái)說(shuō),Yac 更加輕量級(jí),我們也不需要在服務(wù)器中再安裝別的什么軟件,只需要安裝這個(gè)擴(kuò)展就可以使用。對(duì)于小型系統(tǒng)特別是就是簡(jiǎn)單的進(jìn)行數(shù)據(jù)緩存的系統(tǒng)來(lái)說(shuō),我們不需要復(fù)雜的數(shù)據(jù)類型,只用這種程序語(yǔ)言的擴(kuò)展就能讓我們的開發(fā)更為方便快捷。 安裝的方式也非常簡(jiǎn)單,一樣的在 PECL 下載安裝包后進(jìn)行擴(kuò)展安裝即可。 基本操作對(duì)于緩存相關(guān)的操作,無(wú)外乎就是添加、修改、刪除緩存。不像外部緩存系統(tǒng),在保存數(shù)組或?qū)ο髸r(shí),PHP 擴(kuò)展類的緩存都能直接保存這些數(shù)據(jù)類型,而不用序列化為字符串或者轉(zhuǎn)化為 JSON 字符串,這是 Apc 和 Yac 的優(yōu)勢(shì)之一。 添加、獲取緩存$yac = new Yac(); 非常簡(jiǎn)單的操作,我們只需要實(shí)例化一個(gè) Yac 類,就可以通過(guò) add() 方法及 get() 方法添加和獲取緩存內(nèi)容。 Yac 擴(kuò)展還重寫了 __set() 和 __get() 魔術(shù)方法,所以我們可以直接通過(guò)操作變量的方式來(lái)操作緩存。 接下來(lái),我們可以通過(guò) info() 函數(shù)查看當(dāng)前緩存的狀態(tài)信息。 print_r($yac->info()); 設(shè)置緩存$yac->set('a', 'new value a!'); set() 函數(shù)的作用就是如果當(dāng)前緩存 key 存在,就修改這個(gè)緩存的內(nèi)容,如果不存在,就創(chuàng)建一個(gè)緩存。 刪除緩存$yac->delete('a'); 對(duì)于單個(gè)緩存的刪除,我們可以直接使用 delete() 函數(shù)來(lái)刪除這個(gè)緩存的內(nèi)容。如果要清空整個(gè)緩存空間,就可以直接使用 flush() 來(lái)清空整個(gè)緩存空間。 別名空間上面我們提到了 緩存空間 這個(gè)東西。其實(shí)也就是在實(shí)例化 Yac 的時(shí)候可以給默認(rèn)的 Yac 類構(gòu)造函數(shù)傳遞一個(gè)別名配置。這樣,不同的 Yac 實(shí)例就相當(dāng)于放在了不同的命名空間中,相同的 Key 的緩存在不同的空間中就不會(huì)相互影響。 $yacFirst = new Yac(); 這段代碼我們都是使用的默認(rèn)的實(shí)例化 Yac 對(duì)象,雖說(shuō)是分開實(shí)例化的,但它們保存的空間是一樣的,所以相同的 a 變量會(huì)相互覆蓋。 $yacFirst = new Yac('first'); 當(dāng)我們使用不同的實(shí)例化參數(shù)之后,相同的 a 就不會(huì)相互影響,它們被存儲(chǔ)在了不同的空間中?;蛘哒f(shuō),Yac 會(huì)自動(dòng)給這些 Key 增加一個(gè) prefix 。 緩存時(shí)效最后,緩存系統(tǒng)都會(huì)針對(duì)緩存內(nèi)容有時(shí)效限制,如果指定了過(guò)期時(shí)間,緩存內(nèi)容就會(huì)在指定的時(shí)間之后過(guò)期。 $yac->add('ttl', '10s', 10); 上述代碼中的 ttl 緩存只設(shè)置了 10 秒的過(guò)期時(shí)間,所以在 sleep() 10 秒后,輸出 ttl 就沒(méi)有任何內(nèi)容了。 需要注意的是,對(duì)于時(shí)間的設(shè)置,如果不設(shè)置的話就是長(zhǎng)久有效,而且不能用 __set() 方法設(shè)置過(guò)期時(shí)間,只能使用 set() 或者 add() 函數(shù)來(lái)設(shè)置過(guò)期時(shí)間。 怎么樣,Yac 擴(kuò)展是不是和我們的 Apc 一樣方便好用,當(dāng)然,更主要的是它的性能以及適用場(chǎng)景。對(duì)于小系統(tǒng),特別是機(jī)器配置不是那么強(qiáng)的操作環(huán)境中,這種擴(kuò)展型的緩存系統(tǒng)能夠讓我們的開發(fā)更加的快捷方便。關(guān)于無(wú)鎖共享的概念我們可以參考下方參考文檔中第二個(gè)鏈接,也就是鳥哥的文章中有詳細(xì)的說(shuō)明。 測(cè)試代碼: https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/PHP%E7%9A%84%E5%8F%A6%E4%B8%80%E4%B8%AA%E9%AB%98%E6%95%88%E7%BC%93%E5%AD%98%E6%89%A9%E5%B1%95%EF%BC%9AYac.php 參考文檔: https://www./manual/zh/book.yac.php https://www./2013/03/18/2846.html https://www.cnblogs.com/sunsky303/p/6554888.html |
|
來(lái)自: 硬核項(xiàng)目經(jīng)理 > 《待分類》