成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP面試??純?nèi)容之Memcache和Redis(1)

nanfeiyan / 1116人閱讀

摘要:以下正文的部分內(nèi)容來(lái)自程序員面試筆試寶典書(shū)籍,如果轉(zhuǎn)載請(qǐng)保留出處一什么是是一個(gè)開(kāi)源免費(fèi)高性能的分布式對(duì)象緩存系統(tǒng),它基于一個(gè)存儲(chǔ)鍵值對(duì)的來(lái)存儲(chǔ)數(shù)據(jù)到內(nèi)存中。預(yù)告面試常考內(nèi)容之和將于本周三更新。

你好,是我琉憶。
繼上周(2019.2-11至2-15)發(fā)布的“PHP面試常考內(nèi)容之面向?qū)ο蟆睂?zhuān)題后,發(fā)布的第二個(gè)專(zhuān)題,感謝你的閱讀。
本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)間為每周一三五,可以關(guān)注本欄持續(xù)關(guān)注,感謝你的支持。

一、什么是Memcache?
二、Memcache有什么特征?
三、Memcache的內(nèi)存管理機(jī)制是什么樣的?
四、Memcache和Memcached有什么區(qū)別?
五、如何操作Memcache?
六、如何使用Memcache做Session共享?
七、什么是Redis?
八、如何使用Redis?
九、使用Redis需要注意哪些問(wèn)題?
十、Memcache和Redis常考的面試題

本章節(jié)的內(nèi)容將會(huì)被分為三篇文章進(jìn)行講解完整塊內(nèi)容,第一篇主要講解一到六,第二篇主要講解七到九,第三篇圍繞第十點(diǎn)。


以下正文的部分內(nèi)容來(lái)自《PHP程序員面試筆試寶典》書(shū)籍,如果轉(zhuǎn)載請(qǐng)保留出處:


一、什么是Memcache?

Memcache是一個(gè)開(kāi)源、免費(fèi)、高性能的分布式對(duì)象緩存系統(tǒng),它基于一個(gè)存儲(chǔ)鍵/值對(duì)的hashmap來(lái)存儲(chǔ)數(shù)據(jù)到內(nèi)存中。它的作用是減少對(duì)數(shù)據(jù)庫(kù)的讀取以提高Web應(yīng)用的性能。雖然它的守護(hù)進(jìn)程(daemon?)是用 C語(yǔ)言實(shí)現(xiàn)的,但是客戶(hù)端可以用任何語(yǔ)言來(lái)編寫(xiě),并通過(guò)Memcache協(xié)議與守護(hù)進(jìn)程通信。需要注意的是,當(dāng)某個(gè)服務(wù)器停止運(yùn)行或崩潰了,所有存放在該服務(wù)器上的鍵/值對(duì)都將丟失。Memcache的服務(wù)器端沒(méi)有提供分布式功能,各個(gè)Memcache應(yīng)用不會(huì)互相通信以共享信息。想要實(shí)現(xiàn)分布式通信,可以搭建幾個(gè)Memcache應(yīng)用,通過(guò)算法實(shí)現(xiàn)此效果。
下面介紹Memcache的兩個(gè)重要概念。slab:為了防止內(nèi)存碎片化,Memcache服務(wù)器端會(huì)預(yù)先將數(shù)據(jù)空間劃分為一系列slab;舉個(gè)例子,現(xiàn)在有一個(gè)100m3的房間,為了合理規(guī)劃這個(gè)房間放置東西,會(huì)在這個(gè)房間里放置30個(gè)1m3的盒子、20個(gè)1.25m3的盒子、15個(gè)1.5m3的盒子……這些盒子就是slab。
LRU:最近最少使用算法;當(dāng)同一個(gè)slab的格子滿(mǎn)了,這時(shí)需要新加一個(gè)值時(shí),不會(huì)考慮將這個(gè)新數(shù)據(jù)放到比當(dāng)前slat更大的空閑slab,而是使用LRU移除舊數(shù)據(jù),放入這個(gè)新數(shù)據(jù)。


二、Memcache有什么特征?

Memcache的特征如下:
1)協(xié)議簡(jiǎn)單。
2)基于libevent的事件處理。
3)內(nèi)置內(nèi)存存儲(chǔ)方式。
4)Memcached不互相通信的分布式。
Memcache的特性如下:
(1)單個(gè)item 最大的數(shù)據(jù)為1MB。
(2)單進(jìn)程最大的使用內(nèi)存為2GB,需要更多內(nèi)存時(shí)可開(kāi)多個(gè)端口。
(3)Memcached是多線(xiàn)程,非阻塞io復(fù)用的網(wǎng)絡(luò)模型,Redis是單線(xiàn)程。
(4)鍵長(zhǎng)最大為250字節(jié)。


三、Memcache的內(nèi)存管理機(jī)制是什么樣的?

Memcache將內(nèi)存分割成各種尺寸的塊(chunk),并把尺寸相同的塊分成組(chunk的集合)。page是分配給slab的內(nèi)存空間,默認(rèn)是1MB,根據(jù)slab大小切分成chunk,chunk是用戶(hù)緩存記錄的內(nèi)存空間,slab class是特定chunk的組。
在存儲(chǔ)數(shù)據(jù)時(shí),Memcache會(huì)壓縮數(shù)據(jù)的大小進(jìn)行存儲(chǔ),一般壓縮后的數(shù)據(jù)為原數(shù)據(jù)大小的30%左右,從而節(jié)省了70%的傳輸性能消耗。如果存儲(chǔ)的數(shù)是小于100字節(jié)的鍵值對(duì),那么壓縮后可能帶來(lái)膨脹,但Memcache都是按照固定大小分塊存儲(chǔ)的,最小也有88B,所以小數(shù)據(jù)帶來(lái)的壓縮膨脹也并不會(huì)有什么影響。
具體流程如下圖所示。

自己整理了一篇“如何解決Memcache的緩存雪崩現(xiàn)象?”的文章,關(guān)注公眾號(hào):“琉憶編程庫(kù)”,回復(fù):“me”,我發(fā)給你。

四、Memcache和Memcached有什么區(qū)別?

其實(shí) memcache 和 memcached 說(shuō)的是 PHP 的擴(kuò)展。
Memcache是一個(gè)自由和開(kāi)放源代碼、高性能、分配的內(nèi)存對(duì)象緩存系統(tǒng)。用于加速動(dòng)態(tài)web應(yīng)用程序,減輕數(shù)據(jù)庫(kù)負(fù)載。它可以應(yīng)對(duì)任意多個(gè)連接,使用非阻塞的網(wǎng)絡(luò)IO。由于它的工作機(jī)制是在內(nèi)存中開(kāi)辟一塊空間,然后建立一個(gè)Hash表,Memcached自管理這些Hash表。
Memcache是該系統(tǒng)的項(xiàng)目名稱(chēng),Memcached是該系統(tǒng)的主程序文件(字母d可以理解為daemon),以守護(hù)程序方式運(yùn)行于一個(gè)或多個(gè)服務(wù)器中,隨時(shí)接受客戶(hù)端的連接操作,使用共享內(nèi)存存取數(shù)據(jù)。
Memcached處理的原子是每一個(gè)(key,value)對(duì)(以下簡(jiǎn)稱(chēng)kv對(duì)),key會(huì)通過(guò)一個(gè)hash算法轉(zhuǎn)化成hash-key,便于查找、對(duì)比以及做到盡可能的散列。同時(shí),memcached用的是一個(gè)二級(jí)散列,通過(guò)一張大hash表來(lái)維護(hù)。
Memcached有兩個(gè)核心組件組成:服務(wù)端(Server)和客戶(hù)端(Client),在一個(gè)memcached的查詢(xún)中,Client先通 過(guò)計(jì)算key的hash值來(lái)確定kv對(duì)所處在的Server位置。當(dāng)Server確定后,客戶(hù)端就會(huì)發(fā)送一個(gè)查詢(xún)請(qǐng)求給對(duì)應(yīng)的Server,讓它來(lái)查找確 切的數(shù)據(jù)。因?yàn)檫@之間沒(méi)有交互以及多播協(xié)議,所以 memcached交互帶給網(wǎng)絡(luò)的


五、如何操作Memcache?

Memcached的操作命令可以分為存儲(chǔ)命令、查找命令、統(tǒng)計(jì)命令等三大類(lèi)。
第一類(lèi),Memcached的存儲(chǔ)命令:

第二類(lèi),Memcached的查找命令:

第三類(lèi),Memcached的統(tǒng)計(jì)命令:

使用示例代碼參考:

addServer("127.0.0.1",11211); //連接Memcache服務(wù)器
    $m->set("mkey","123",600);//設(shè)置一個(gè)鍵名為mkey,值為123,600s過(guò)期,0為永久有效
    echo $m->get("mkey");//輸出123,get可以獲取鍵名為mkey的值
    $m->delete("mkey");//刪除鍵名為mkey的值
?>

具體全部的使用方法不在此一一羅列,可根據(jù)上面的方法表和參考示例進(jìn)行模仿使用。


六、如何使用Memcache做Session共享?

默認(rèn)狀態(tài)下,PHP使用文件方式做Session存儲(chǔ),磁盤(pán)的I/O性能肯定沒(méi)有內(nèi)存中存取快,因此改用memcache來(lái)存儲(chǔ)Session在讀寫(xiě)速度上會(huì)快很多,而且在多臺(tái)服務(wù)器集群時(shí),使用memcahced能夠有效地解決Session共享的問(wèn)題。
我們配置好memcached服務(wù)器后,修改php.ini配置文件的代碼:

session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211”

也可以使用在網(wǎng)站目錄下放置Apache的.htaccess文件:

php_value session.save_handler “memcache”
php_value session.save_path “tcp://127.0.0.1:11211”

執(zhí)行PHP腳本時(shí)寫(xiě)入以下兩行:

ini_set(“session.save_handler”,”memcache”);
ini_set(“session.save_path”,”tcp://127.0.0.1:11211”);

可以在使用多個(gè)memcached服務(wù)器時(shí)用都好隔開(kāi),還可以額外帶參數(shù):persistent、weight、timeout、retry_interval等。例如:

$session_save_path = “tcp://:11211?persistent=1&weight=1&timeout=1&retry_interval=15,udp://:11211”;

如果想使用udp支持,需要確保你的memcached服務(wù)器啟用,也確保Web服務(wù)器連接到memcache服務(wù)器端口正常。重新啟動(dòng)Apache后,將開(kāi)始使用的memcache存儲(chǔ)PHP的Session。
測(cè)試案例:

”;
    echo session_id();
?>

測(cè)試memcache是否已存儲(chǔ)成功,通過(guò)sessionid去取對(duì)應(yīng)的數(shù)據(jù):

$m = memcache_connect(‘localhost’,11211);
echo $m->get(“13765595df9dsa8f9dsa8fa9sf8saf865”);

得到結(jié)果:

17559898989

如果使用memcached作為Session存儲(chǔ),要確保memcached的服務(wù)正常工作,否則Session相關(guān)功能將不起作用,這樣PHP的處理就多了一層外面的依賴(lài)。因?yàn)閙emcached是使用內(nèi)存的,這樣當(dāng)用戶(hù)量比較大時(shí),就可能由于內(nèi)存方面原因?qū)е耂ession時(shí)長(zhǎng)上的問(wèn)題,Session的實(shí)際失效時(shí)長(zhǎng)達(dá)不到設(shè)定的失效時(shí)長(zhǎng)(由memcached在內(nèi)存不夠時(shí)的處理機(jī)制決定)。

Memcache可擴(kuò)展考察的內(nèi)容有很多,由于整理的篇幅內(nèi)容很多,在此只是羅列了普遍遇到的Memcache相關(guān)的知識(shí)考點(diǎn)。額外的考點(diǎn)還有:
(1)Memcache的工作流程是什么樣的?
(2)Memcache如何實(shí)現(xiàn)分布式?
(3)Memcache的分布式算法有哪些?
(4)使用Memcache有哪些技術(shù)限制?
(5)Memcache和Redis有什么相同和區(qū)別的地方?

更多相關(guān)面試知識(shí)點(diǎn)可以閱讀《PHP程序員面試筆試寶典》


預(yù)告:PHP面試??純?nèi)容之Memcache和Redis(2)將于本周三(2019.2-20)更新。
以上內(nèi)容摘自《PHP程序員面試筆試寶典》書(shū)籍,該書(shū)已在天貓、京東、當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷(xiāo)售。

更多PHP相關(guān)的面試知識(shí)、考題可以關(guān)注公眾號(hào)獲?。?strong>琉憶編程庫(kù)

對(duì)本文有什么問(wèn)題或建議都可以進(jìn)行留言,我將不斷完善追求極致,感謝你們的支持。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/61749.html

相關(guān)文章

  • PHP面試???/em>內(nèi)容MemcacheRedis(3)

    摘要:自己整理了一篇不同等級(jí)面試都問(wèn)什么的文章,關(guān)注公眾號(hào)琉憶編程庫(kù),回復(fù)等級(jí),我發(fā)給你。 你好,是我琉憶。今天是周五了,再上一天班就周末了,提前祝大家周末愉快。嘿嘿。這篇文章是本周Memcache和Redis內(nèi)存數(shù)據(jù)庫(kù)??嫉膶?zhuān)題。本周一和周三更新的文章路徑:PHP面試??純?nèi)容之Memcache和Redis(1)PHP面試??純?nèi)容之Memcache和Redis(2)本周(2019.2-18至...

    Lionad-Morotar 評(píng)論0 收藏0
  • PHP面試常考內(nèi)容MemcacheRedis(3)

    摘要:自己整理了一篇不同等級(jí)面試都問(wèn)什么的文章,關(guān)注公眾號(hào)琉憶編程庫(kù),回復(fù)等級(jí),我發(fā)給你。 你好,是我琉憶。今天是周五了,再上一天班就周末了,提前祝大家周末愉快。嘿嘿。這篇文章是本周Memcache和Redis內(nèi)存數(shù)據(jù)庫(kù)??嫉膶?zhuān)題。本周一和周三更新的文章路徑:PHP面試??純?nèi)容之Memcache和Redis(1)PHP面試??純?nèi)容之Memcache和Redis(2)本周(2019.2-18至...

    zhaochunqi 評(píng)論0 收藏0
  • PHP面試???/em>內(nèi)容MemcacheRedis1

    摘要:以下正文的部分內(nèi)容來(lái)自程序員面試筆試寶典書(shū)籍,如果轉(zhuǎn)載請(qǐng)保留出處一什么是是一個(gè)開(kāi)源免費(fèi)高性能的分布式對(duì)象緩存系統(tǒng),它基于一個(gè)存儲(chǔ)鍵值對(duì)的來(lái)存儲(chǔ)數(shù)據(jù)到內(nèi)存中。預(yù)告面試??純?nèi)容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發(fā)布的PHP面試??純?nèi)容之面向?qū)ο髮?zhuān)題后,發(fā)布的第二個(gè)專(zhuān)題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)...

    wenyiweb 評(píng)論0 收藏0
  • PHP面試???/em>內(nèi)容MemcacheRedis(2)

    摘要:繼周一發(fā)布的面試常考內(nèi)容之和后,這是第二篇,感謝你的支持和閱讀。預(yù)告面試??純?nèi)容之和將于本周五更新。以上內(nèi)容摘自程序員面試筆試寶典書(shū)籍,該書(shū)已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷(xiāo)售。 你好,是我琉憶。繼周一(2019.2-18)發(fā)布的PHP面試常考內(nèi)容之Memcache和Redis(1)后,這是第二篇,感謝你的支持和閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)間為每周...

    Eric 評(píng)論0 收藏0
  • PHP面試???/em>內(nèi)容MemcacheRedis(2)

    摘要:繼周一發(fā)布的面試??純?nèi)容之和后,這是第二篇,感謝你的支持和閱讀。預(yù)告面試常考內(nèi)容之和將于本周五更新。以上內(nèi)容摘自程序員面試筆試寶典書(shū)籍,該書(shū)已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷(xiāo)售。 你好,是我琉憶。繼周一(2019.2-18)發(fā)布的PHP面試??純?nèi)容之Memcache和Redis(1)后,這是第二篇,感謝你的支持和閱讀。本周(2019.2-18至2-22)的文章內(nèi)容點(diǎn)為以下幾點(diǎn),更新時(shí)間為每周...

    sewerganger 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<