真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP的高效緩存擴(kuò)展Yac的介紹以及使用方法

這篇文章將為大家詳細(xì)講解有關(guān)PHP的高效緩存擴(kuò)展Yac的介紹以及使用方法,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。

云浮網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),云浮網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為云浮上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個(gè)售后服務(wù)好的云浮做網(wǎng)站的公司定做!

 

PHP的高效緩存擴(kuò)展:Yac

什么是 Yac

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

Yac 是一個(gè)無鎖共享緩存系統(tǒng),因?yàn)闊o鎖,所以它的效率非常高。據(jù)說 Apc 的效率是 Memcached 的一倍以上,而 Yac 比 Apc 更快。這就是它最大的特點(diǎn)。

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

安裝的方式也非常簡單,一樣的在 PECL 下載安裝包后進(jìn)行擴(kuò)展安裝即可。

 

基本操作

對于緩存相關(guān)的操作,無外乎就是添加、修改、刪除緩存。不像外部緩存系統(tǒng),在保存數(shù)組或?qū)ο髸r(shí),PHP 擴(kuò)展類的緩存都能直接保存這些數(shù)據(jù)類型,而不用序列化為字符串或者轉(zhuǎn)化為 JSON 字符串,這是 Apc 和 Yac 的優(yōu)勢之一。

 

添加、獲取緩存

$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"
// }
 

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

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

接下來,我們可以通過 info() 函數(shù)查看當(dāng)前緩存的狀態(tài)信息。

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
// )
   

設(shè)置緩存

$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() 函數(shù)的作用就是如果當(dāng)前緩存 key 存在,就修改這個(gè)緩存的內(nèi)容,如果不存在,就創(chuàng)建一個(gè)緩存。

 

刪除緩存

$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
// )
 

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

 

別名空間

上面我們提到了 緩存空間 這個(gè)東西。其實(shí)也就是在實(shí)例化 Yac 的時(shí)候可以給默認(rèn)的 Yac 類構(gòu)造函數(shù)傳遞一個(gè)別名配置。這樣,不同的 Yac 實(shí)例就相當(dāng)于放在了不同的命名空間中,相同的 Key 的緩存在不同的空間中就不會(huì)相互影響。

$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!
 

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

$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!
 

當(dāng)我們使用不同的實(shí)例化參數(shù)之后,相同的 a 就不會(huì)相互影響,它們被存儲(chǔ)在了不同的空間中。或者說,Yac 會(huì)自動(dòng)給這些 Key 增加一個(gè) prefix 。

 

緩存時(shí)效

最后,緩存系統(tǒng)都會(huì)針對緩存內(nèi)容有時(shí)效限制,如果指定了過期時(shí)間,緩存內(nèi)容就會(huì)在指定的時(shí)間之后過期。

$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 緩存只設(shè)置了 10 秒的過期時(shí)間,所以在 sleep() 10 秒后,輸出 ttl 就沒有任何內(nèi)容了。

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

怎么樣,Yac 擴(kuò)展是不是和我們的 Apc 一樣方便好用,當(dāng)然,更主要的是它的性能以及適用場景。對于小系統(tǒng),特別是機(jī)器配置不是那么強(qiáng)的操作環(huán)境中,這種擴(kuò)展型的緩存系統(tǒng)能夠讓我們的開發(fā)更加的快捷方便。

關(guān)于PHP的高效緩存擴(kuò)展Yac的介紹以及使用方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)站標(biāo)題:PHP的高效緩存擴(kuò)展Yac的介紹以及使用方法
文章URL:http://weahome.cn/article/pegeoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部