国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP面試常考內容之Memcache和Redis(3)

zhaochunqi / 1567人閱讀

摘要:自己整理了一篇不同等級面試都問什么的文章,關注公眾號琉憶編程庫,回復等級,我發給你。

你好,是我琉憶。
今天是周五了,再上一天班就周末了,提前祝大家周末愉快。嘿嘿。
這篇文章是本周Memcache和Redis內存數據庫常考的專題。
本周一和周三更新的文章路徑:
PHP面試常考內容之Memcache和Redis(1)
PHP面試常考內容之Memcache和Redis(2)
本周(2019.2-18至2-22)的文章內容點為以下幾點,更新時間為每周一三五,可以關注本欄持續關注,感謝你的支持。

一、什么是Memcache?
二、Memcache有什么特征?
三、Memcache的內存管理機制是什么樣的?
四、Memcache和Memcached有什么區別?
五、如何操作Memcache?
六、如何使用Memcache做Session共享?
七、什么是Redis?
八、如何使用Redis?
九、使用Redis需要注意哪些問題?
十、新增:Redis和Memcache有什么不同?
十一、新增:Redis如何實現持久化?
十二、Memcache和Redis常考的面試題

本章節的內容將會被分為三篇文章進行講解完整塊內容,第一篇主要講解一到六,第二篇主要講解七到十一(新增了十和十一),第三篇圍繞第十二點。

自己整理了一篇“PHP不同等級面試都問什么?”的文章,關注公眾號:“琉憶編程庫”,回復:“等級”,我發給你。

以下正文的部分內容來自《PHP程序員面試筆試真題解析》書籍,如果轉載請保留出處:


十二、Memcache和Redis常考的面試題 【真題1】Memcache的工作原理是什么?

答案:Memcache的工作就是在專門的機器內存里維護一張巨大的hash表,存儲經常被讀寫的一些文件與數據,從而極大地提高網站的運行效率。 ?
Memcache的程序運行在一個或多個服務器中,Memcache把全部的數據保存在內存中,通過hash表的方式,每條數據由key/value的形式構成,隨時接受客戶端的請求,然后返回結果。

客戶端與Memcache建立連接后,存儲對象主要是通過唯一的key存儲value到內存中,取數據時通過這個key從內存中獲取對應的value。由于Memcache的數據是存儲在內存中而不是保存在cache文件中,所以Memcache訪問比較快,但是由于這些數據不是永久化存儲,所以不建議存儲重要數據在Memcache中,因為重啟服務器后這些數據就會消失。


【真題2】Memcache的優點有哪些?

答案:Memcache是一個高性能的分布式內存對象緩存系統,主要通過在內存里維護一個巨大的hash表進行數據緩存。它主要是將數據存儲到內存中,然后從內存中讀取數據,從而提高讀取速度。它主要通過key-value的形式存儲各種數據,包括圖像、視頻、文件等。
它具有以下幾點優點:

(1)支持多臺服務器使用Memcache,由于Memcache的存儲數據大小必須小于內存的大小,所以可以將Memcache使用在多臺服務器上,增加緩存容量;

(2)支持均衡請求。當使用多臺Memcache服務器時,可以均衡請求,避免所有請求都進入一臺Memcache服務器中,避免服務器掛掉而丟失數據;

(3)支持分布式,可以解決緩存本身水平線性擴展的問題和緩存大并發下的自身性能問題,避免緩存的單點故障問題;

(4)支持部分容災問題,如果多臺服務器存儲了Memcache數據,其中一臺Memcache服務器掛掉,部分請求還是可以在其它服務器的Memcache中命中,為修復掛掉的服務器爭取一些時間。


【真題3】如何合理地使用Memcache緩存?如果緩存數據量過大,那么如何部署?(分布式,緩存時間,優化緩存數據)

答案:如果要合理地使用Memcache緩存,那么需要注意以下幾點內容:

(1)因為Memcache支持最大的存儲對象大小為1M,所以當合理使用Memcache緩存時,要求不能往Memcache存儲一個大于1MB的數據;

(2)Memcache存儲的所有數據,如果數據大小分布于各種chunk大小區間,從64B到1MB都有,那么會造成內存的極大浪費和Memcache的異常。所以需要注意數據大小的分布區間;

(3)key的長度不能大于250個字符;

(4)虛擬主機不允許運行Memcache服務,所以不能把Memcache部署到虛擬主機中;

(5)因為Memcache可以輕松訪問到,所以可以運行在不安全的環境中,如果對數據安全要求高,那么需要著重考慮運行環境的安全問題;

(6)因為Memcache存儲的數據都在內存中,服務器掛掉就會清空內存,所以緩存中的數據盡量是丟失了也不會有太大影響的數據。

如果緩存中的數據量過大,那么可以采取以下的辦法:
(1)使用Memcache服務器集群的方法,首先是將數據安排放在不同的Memcache服務器上,可以將不同硬件服務器上的Memcache服務器再做成一個數據互相備份的組,避免數據的單點丟失問題;

(2)緩存數據到數據庫中,在數據庫中先建一張表來說明Memcache服務器集群中緩存數據的存放邏輯,然后實現把緩存數據存到數據庫中,可以保證數據庫和緩存的數據雙向存取。


【真題4】Redis 與 Memcache有什么區別?

答案:Redis是一個完全開源免費的高性能key-value數據庫,具有豐富的數據類型,可以支持數據的持久化,將內存中的數據保存在磁盤中,當重啟服務器時可以再次加載使用。

Memcache是一個高性能的分布式內存對象緩存系統,用于動態的Web應用中幫助數據庫減輕負擔,在內存中緩存數據和對象,減少每次訪問數據時對數據庫的訪問次數,從而提高訪問速度。

它們具有以下幾點區別:
(1)Redis和Memcache的最大區別是,雖然Memcache和Redis都是將數據存在內存中,是內存數據庫,但Redis存儲時,并不是所有的數據都一直存儲在內存中,而Memcache存儲時,數據都存在內存中;

(2)數據安全問題,由于memecache 把數據全部存在內存之中,服務器掛掉后,重啟服務器數據就會丟失,而Redis可以定期保存數據到磁盤中做持久化存儲,當需要時可以再加載使用。對于災難恢復,Memcache掛掉后,數據不可恢復,但Redis數據丟失后可以通過aof恢復;

(3)Redis支持多種數據結構存儲,例如list,set,hash等數據結構的存儲,而Memcache主要是在內存中維護一個統一的巨大的hash表進行存儲數據,只支持簡單的key/value類型的數據存儲,但Memcache可以存儲圖片、視頻、文件及數據庫檢索結果等;

(4)數據備份問題,Redis支持數據的備份,即master-slave模式的數據備份。而Memcache不支持數據持久化,所以無法進行數據備份;

(5)在內存使用率上,使用簡單的key-value存儲的話,Memcached的內存利用率更高,而如果Redis采用hash結構來做key-value存儲,由于其組合式的壓縮,其內存利用率會高于Memcached。具體和應用場景、數據特性有關;

(6)在線程上的比較,Memcache是支持多線程的,而Redis只支持單線程,所以CPU利用方面Memcache優于Redis;

(7)它們的擴展都需要做集群;實現方式:master-slave、Hash;

(8)數據的讀寫方面,Redis和Memcache在寫入性能上面差別不大,讀取性能上面尤其是批量讀取性能上Memcache更強。


【真題5】Redis集群方案應該怎么做?都有哪些方案?

答案:1.twemproxy,大概概念是,它類似于一個代理方式,使用方法和普通redis無任何區別,設置好它下屬的多個redis實例后,使用時在本需要連接redis的地方改為連接twemproxy,它會以一個代理的身份接收請求并使用一致性hash算法,將請求轉接到具體redis,將結果再返回twemproxy。使用方式簡便(相對redis只需修改連接端口),對舊項目擴展的首選。 問題:twemproxy自身單端口實例的壓力,使用一致性hash后,對redis節點數量改變時候的計算值的改變,數據無法自動移動到新的節點。

2.codis,目前用的最多的集群方案,基本和twemproxy一致的效果,但它支持在 節點數量改變情況下,舊節點數據可恢復到新hash節點。

3.redis cluster3.0自帶的集群,特點在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持節點設置從節點。具體看官方文檔介紹。

4.在業務代碼層實現,起幾個毫無關聯的redis實例,在代碼層,對key 進行hash計算,然后去對應的redis實例操作數據。 這種方式對hash層代碼要求比較高,考慮部分包括,節點失效后的替代算法方案,數據震蕩后的自動腳本恢復,實例的監控,等等。


自己整理了一篇“PHP不同等級面試都問什么?”的文章,關注公眾號:“琉憶編程庫”,回復:“等級”,我發給你。

【真題6】Redis有哪些適合的場景?

答案:(1)、會話緩存(Session Cache)

最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲(如Memcached)的優勢在于:Redis提供持久化。當維護一個不是嚴格要求一致性的緩存時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎?

幸運的是,隨著 Redis 這些年的改進,很容易找到怎么恰當的使用Redis來緩存會話的文檔。甚至廣為人知的商業平臺Magento也提供Redis的插件。

(2)、全頁緩存(FPC)

除基本的會話token之外,Redis還提供很簡便的FPC平臺。回到一致性問題,即使重啟了Redis實例,因為有磁盤的持久化,用戶也不會看到頁面加載速度的下降,這是一個極大改進,類似PHP本地FPC。

再次以Magento為例,Magento提供一個插件來使用Redis作為全頁緩存后端。

此外,對WordPress的用戶來說,Pantheon有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面。

(3)、隊列

Reids在內存存儲引擎領域的一大優點是提供 list 和 set 操作,這使得Redis能作為一個很好的消息隊列平臺來使用。Redis作為隊列使用的操作,就類似于本地程序語言(如Python)對 list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你馬上就能找到大量的開源項目,這些項目的目的就是利用Redis創建非常好的后端工具,以滿足各種隊列需求。例如,Celery有一個后臺就是使用Redis作為broker,你可以從這里去查看。

(4),排行榜/計數器

Redis在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執行這些操作的時候變的非常簡單,Redis只是正好提供了這兩種數據結構。所以,我們要從排序集合中獲取到排名最靠前的10個用戶–我們稱之為“user_scores”,我們只需要像下面一樣執行即可:

當然,這是假定你是根據你用戶的分數做遞增的排序。如果你想返回用戶及用戶的分數,你需要這樣執行:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games就是一個很好的例子,用Ruby實現的,它的排行榜就是使用Redis來存儲數據的,你可以在這里看到。

(5)、發布/訂閱

最后(但肯定不是最不重要的)是Redis的發布/訂閱功能。發布/訂閱的使用場景確實非常多。我已看見人們在社交網絡連接中使用,還可作為基于發布/訂閱的腳本觸發器,甚至用Redis的發布/訂閱功能來建立聊天系統!(不,這是真的,你可以去核實)。

【真題7】Redis持久化數據和緩存怎么做擴容?

答案:如果Redis被當做緩存使用,使用一致性哈希實現動態擴容縮容。

如果Redis被當做一個持久化存儲使用,必須使用固定的keys-to-nodes映射關系,節點的數量一旦確定不能變化。否則的話(即Redis節點需要動態變化的情況),必須使用可以在運行時進行數據再平衡的一套系統,而當前只有Redis集群可以做到這樣。


【真題8】Redis回收進程如何工作的?

答案:一個客戶端運行了新的命令,添加了新的數據。

Redi檢查內存使用情況,如果大于maxmemory的限制, 則根據設定好的策略進行回收。

一個新的命令被執行,等等。

所以我們不斷地穿越內存限制的邊界,通過不斷達到邊界然后不斷地回收回到邊界以下。

如果一個命令的結果導致大量內存被使用(例如很大的集合的交集保存到一個新的鍵),不用多久內存限制就會被這個內存使用量超越。


【真題9】都有哪些辦法可以降低Redis的內存使用情況呢?

答案:如果你使用的是32位的Redis實例,可以好好利用Hash,list,sorted set,set等集合類型數據,因為通常情況下很多小的Key-Value可以用更緊湊的方式存放到一起。


【真題10】你知道有哪些Redis分區實現方案?

答案:客戶端分區就是在客戶端就已經決定數據會被存儲到哪個redis節點或者從哪個redis節點讀取。大多數客戶端已經實現了客戶端分區。

代理分區 意味著客戶端將請求發送給代理,然后代理決定去哪個節點寫數據或者讀數據。代理根據分區規則決定請求哪些Redis實例,然后根據Redis的響應結果返回給客戶端。redis和memcached的一種代理實現就是Twemproxy

查詢路由(Query routing) 的意思是客戶端隨機地請求任意一個redis實例,然后由Redis將請求轉發給正確的Redis節點。Redis Cluster實現了一種混合形式的查詢路由,但并不是直接將請求從一個redis節點轉發到另一個redis節點,而是在客戶端的幫助下直接redirected到正確的redis節點。


自己根據不同PHP不同等級面試時,會問哪些PHP常考的知識點整理成了一篇文章
自己整理了一篇“PHP不同等級面試都問什么?”的文章,關注公眾號:“琉憶編程庫”,回復:“等級”,我發給你。

更多相關面試常考真題可以閱讀《PHP程序員面試筆試真題解析》

預告:下周(2019.2.25至2019.3.1)一三五將更新的主題為:PHP面試之會話控制、網絡協議、相關的面試題

以上內容摘自《PHP程序員面試筆試真題解析》書籍,該書已在天貓、京東、當當等電商平臺銷售。

更多PHP相關的面試知識、考題可以關注公眾號獲取:琉憶編程庫

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61747.html

相關文章

  • PHP面試常考內容MemcacheRedis3

    摘要:自己整理了一篇不同等級面試都問什么的文章,關注公眾號琉憶編程庫,回復等級,我發給你。 你好,是我琉憶。今天是周五了,再上一天班就周末了,提前祝大家周末愉快。嘿嘿。這篇文章是本周Memcache和Redis內存數據庫常考的專題。本周一和周三更新的文章路徑:PHP面試常考內容之Memcache和Redis(1)PHP面試常考內容之Memcache和Redis(2)本周(2019.2-18至...

    Lionad-Morotar 評論0 收藏0
  • PHP面試常考內容MemcacheRedis(2)

    摘要:繼周一發布的面試常考內容之和后,這是第二篇,感謝你的支持和閱讀。預告面試常考內容之和將于本周五更新。以上內容摘自程序員面試筆試寶典書籍,該書已在天貓京東當當等電商平臺銷售。 你好,是我琉憶。繼周一(2019.2-18)發布的PHP面試常考內容之Memcache和Redis(1)后,這是第二篇,感謝你的支持和閱讀。本周(2019.2-18至2-22)的文章內容點為以下幾點,更新時間為每周...

    Eric 評論0 收藏0
  • PHP面試常考內容MemcacheRedis(2)

    摘要:繼周一發布的面試常考內容之和后,這是第二篇,感謝你的支持和閱讀。預告面試常考內容之和將于本周五更新。以上內容摘自程序員面試筆試寶典書籍,該書已在天貓京東當當等電商平臺銷售。 你好,是我琉憶。繼周一(2019.2-18)發布的PHP面試常考內容之Memcache和Redis(1)后,這是第二篇,感謝你的支持和閱讀。本周(2019.2-18至2-22)的文章內容點為以下幾點,更新時間為每周...

    sewerganger 評論0 收藏0
  • PHP面試常考內容MemcacheRedis(1)

    摘要:以下正文的部分內容來自程序員面試筆試寶典書籍,如果轉載請保留出處一什么是是一個開源免費高性能的分布式對象緩存系統,它基于一個存儲鍵值對的來存儲數據到內存中。預告面試常考內容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發布的PHP面試常考內容之面向對象專題后,發布的第二個專題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內容點為以下幾點,更新時...

    wenyiweb 評論0 收藏0
  • PHP面試常考內容MemcacheRedis(1)

    摘要:以下正文的部分內容來自程序員面試筆試寶典書籍,如果轉載請保留出處一什么是是一個開源免費高性能的分布式對象緩存系統,它基于一個存儲鍵值對的來存儲數據到內存中。預告面試常考內容之和將于本周三更新。 你好,是我琉憶。繼上周(2019.2-11至2-15)發布的PHP面試常考內容之面向對象專題后,發布的第二個專題,感謝你的閱讀。本周(2019.2-18至2-22)的文章內容點為以下幾點,更新時...

    nanfeiyan 評論0 收藏0

發表評論

0條評論

zhaochunqi

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<