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

資訊專欄INFORMATION COLUMN

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

sewerganger / 1457人閱讀

摘要:繼周一發(fā)布的面試常考內(nèi)容之和后,這是第二篇,感謝你的支持和閱讀。預(yù)告面試常考內(nèi)容之和將于本周五更新。以上內(nèi)容摘自程序員面試筆試寶典書籍,該書已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷售。

你好,是我琉憶。
繼周一(2019.2-18)發(fā)布的“PHP面試??純?nèi)容之Memcache和Redis(1)”后,這是第二篇,感謝你的支持和閱讀。
本周(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需要注意哪些問題?
十、新增:Redis和Memcache有什么不同?
十一、新增:Redis如何實(shí)現(xiàn)持久化?
十二、Memcache和Redis??嫉拿嬖囶}

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

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


七、什么是Redis?

Redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set,有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集、并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,Redis支持各種不同方式的排序。與Memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別是Redis會(huì)周期性地把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。

Redis的出現(xiàn),很大程度上彌補(bǔ)了Memcached這類key/value存儲(chǔ)的不足,在部分場(chǎng)合可以對(duì)關(guān)系數(shù)據(jù)庫起到很好的補(bǔ)充作用。它提供了Java、C/C++、C#、PHP、JavaScript、Perl、Object-C、Python、Ruby、Erlang等客戶端,使用起來很方便。

Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制。存盤可以有意無意地對(duì)數(shù)據(jù)進(jìn)行寫操作。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫在任何地方同步樹時(shí),可訂閱一個(gè)頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對(duì)讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助。


八、如何使用Redis?

set方法的使用示例:

connect("127.0.0.1", 6378);  
    $res = $Redis->set(aaa,"bbbb");  
    var_dump($res); //結(jié)果:bool(true)                                                                                                   
?>

以下僅羅列各使用方法的匯總,具體使用方法可以參考示例和PHP的寫法進(jìn)行使用:

1、字符串類型的使用方法

2、Hash類型使用方法

3、List類型使用方法

4、Set類型使用方法

5、Sorted set類型使用方法


九、使用Redis需要注意哪些問題?

與MySQL一樣,Redis在使用過程中,也會(huì)碰到很多的問題,適當(dāng)?shù)募记珊蛢?yōu)化將大大提高Redis的使用性能,提高服務(wù)的質(zhì)量?,F(xiàn)將常見的一些問題總結(jié)如下:

1.停止使用keys *操作

keys*操作執(zhí)行速度將會(huì)變慢。因?yàn)閗eys命令的時(shí)間復(fù)雜度是O(n),其中n是要返回的keys的個(gè)數(shù),由此可見這個(gè)命令的復(fù)雜度就取決于數(shù)據(jù)量的大小了。當(dāng)數(shù)據(jù)量比較大時(shí),在這個(gè)操作執(zhí)行期間,其他任何命令在實(shí)例中都無法執(zhí)行,嚴(yán)重影響了性能。
可以使用scan命令來代替,scan命令通過增量迭代的方式來掃描數(shù)據(jù)庫。

2.定位Redis速度降低的原因

使用INFO commandstats命令來查看所有命令的統(tǒng)計(jì)情況,如命令執(zhí)行了多少次,執(zhí)行命令所耗費(fèi)的毫秒數(shù)等信息。

3.盡量使用hash的存儲(chǔ)方式

Hash的存儲(chǔ)方式會(huì)大大提高操作效率。

4.設(shè)置key值的存活時(shí)間

無論什么時(shí)候,只要有可能就利用key超時(shí)的優(yōu)勢(shì)。一個(gè)很好的例子就是存儲(chǔ)一些諸如臨時(shí)認(rèn)證key之類的東西。當(dāng)你去查找一個(gè)授權(quán)key時(shí)——以O(shè)AUTH為例——通常會(huì)得到一個(gè)超時(shí)時(shí)間。這樣在設(shè)置key的時(shí)候,設(shè)成同樣的超時(shí)時(shí)間,Redis就會(huì)自動(dòng)為你清除!而不再需要使用KEYS *來遍歷所有的key了。

5.對(duì)于很重要的數(shù)據(jù),請(qǐng)使用異常處理機(jī)制

如果必須確保關(guān)鍵性的數(shù)據(jù)可以被放入Redis的實(shí)例中,那么請(qǐng)使用異常處理機(jī)制。幾乎所有的Redis客戶端采用的都是“發(fā)送即忘”策略,因此經(jīng)常需要考慮一個(gè) key 是否真正被放到Redis數(shù)據(jù)庫中了。加入異常處理機(jī)制是程序健壯性保障的前提。

6.多實(shí)例應(yīng)用

無論什么時(shí)候,只要有可能就分散多Redis實(shí)例的工作量。Redis集群允許基于key范圍分離出部分包含主/從模式的key。多實(shí)例是保證集群資源最大利用,集群穩(wěn)定的重要保障。


自己整理了一篇“Redis如何實(shí)現(xiàn)集群?”的文章,關(guān)注公眾號(hào):“琉憶編程庫”,回復(fù):“redis”,我發(fā)給你。

十、Redis和Memcache有什么不同?

(1)數(shù)據(jù)結(jié)構(gòu):Memcache只支持key value存儲(chǔ)方式,Redis支持更多的數(shù)據(jù)類型,比如Key value、hash、list、set、zset;
(2)多線程:Memcache支持多線程,Redis支持單線程;CPU利用方面Memcache優(yōu)于Redis;
(3)持久化:Memcache不支持持久化,Redis支持持久化;
(4)內(nèi)存利用率:Memcache高,Redis低(采用壓縮的情況下比Memcache高);
(5)過期策略:Memcache過期后,不刪除緩存,會(huì)導(dǎo)致下次取數(shù)據(jù)數(shù)據(jù)的問題,Redis有專門線程,清除緩存數(shù)據(jù);

十一、Redis如何實(shí)現(xiàn)持久化?

Redis是一個(gè)支持?jǐn)?shù)據(jù)持久化的內(nèi)存數(shù)據(jù)庫,可以對(duì)Redis設(shè)置,讓Redis周期性的把更新的數(shù)據(jù)同步到磁盤中保證數(shù)據(jù)持久化。
Redis支持的持久化策略有兩種,分別是:RDB和AOF。

1、RDB持久化

RDB持久化的意思是:指定的時(shí)間間隔內(nèi)保存數(shù)據(jù)快照。Redis默認(rèn)的持久化方式就是RDB。

RDB的工作原理為當(dāng) Redis 需要做持久化時(shí),Redis 會(huì) fork 一個(gè)子進(jìn)程,子進(jìn)程將數(shù)據(jù)寫到磁盤上一個(gè)臨時(shí) RDB 文件中。當(dāng)子進(jìn)程完成寫臨時(shí)文件后,將原來的 RDB 替換掉,這樣的好處就是可以 copy-on-write。

在Redis.conf 文件中RDB持久化的默認(rèn)設(shè)置為:

save 300 10  #300秒內(nèi),如果超過10個(gè)key被修改,則發(fā)起快照保存;
RDB的優(yōu)點(diǎn):

因?yàn)镽DB的持久化方式是可以在時(shí)間間隔內(nèi)進(jìn)行數(shù)據(jù)快照,所以RDB非常適合用于災(zāi)難恢復(fù)。例如設(shè)置每小時(shí)備份一次,或每天備份一次總的,從而方便數(shù)據(jù)的追溯和還原到不同版本。

RDB的缺點(diǎn):

(1)特定時(shí)間下才進(jìn)行一次持久化,所以易丟失數(shù)據(jù);例如你設(shè)置30分鐘備份一次數(shù)據(jù),但是如果Redis服務(wù)器發(fā)生故障,那么就可能丟失好幾分鐘的數(shù)據(jù)沒能備份。
(2)龐大數(shù)據(jù)時(shí),保存時(shí)會(huì)出現(xiàn)性能問題。

2、AOF持久化

AOF:先把命令追加到操作日志的尾部,保存所有歷史操作。

AOF的工作原理是,每一個(gè)寫命令都通過write函數(shù)追加到 appendonly.aof 中,當(dāng)Redis出現(xiàn)故障重啟時(shí),將會(huì)讀取 AOF 文件進(jìn)行“重放”以恢復(fù)到 Redis 關(guān)閉前的狀態(tài)。

Redis.conf 對(duì)AOF持久化的設(shè)置:

Redis.conf appendonly yes  #開啟全程持久化
appendfsync always     #每次有數(shù)據(jù)修改發(fā)生時(shí)都會(huì)寫入AOF文件。
appendfsync everysec     #每秒鐘同步一次,該策略為AOF的缺省策略。
AOF的優(yōu)點(diǎn):

(1)數(shù)據(jù)非常完整,故障恢復(fù)丟失數(shù)據(jù)少;
(2)可對(duì)歷史操作進(jìn)行處理。

AOF的缺點(diǎn):

(1)在備份相同的數(shù)據(jù)集時(shí),AOF的文件體積大于RDB的文件體積;
(2)AOF使用fsync策略的話,AOF的速度可能會(huì)慢于RDB。

3、選擇哪一種Redis做持久化策略更好?

因?yàn)镽edis是支持同時(shí)開啟RDB和AOF持久化策略的,所以數(shù)據(jù)備份安全性考慮的話兩者都可以設(shè)置,當(dāng)Redis重啟后會(huì)優(yōu)先使用AOF恢復(fù)數(shù)據(jù),保證丟失的數(shù)據(jù)最少。

如果要二選一的話,可以根據(jù)自己的業(yè)務(wù)進(jìn)行選擇:

(1)如果對(duì)數(shù)據(jù)的丟失要求很高,可以選擇AOF持久化策略;
(2)AOF對(duì)Redis執(zhí)行的每一條命令都會(huì)追加到磁盤中,會(huì)降低Redis的性能,如果對(duì)Redis的性能有所考慮,可以選擇RDB持久化策略;
(3)考慮數(shù)據(jù)災(zāi)難恢復(fù)的情況,可以選擇RDB持久化策略。


這里還有一個(gè)常考的Redis相關(guān)的問題:Redis如何實(shí)現(xiàn)緩存集群?

關(guān)注公眾號(hào):“琉憶編程庫”,回復(fù):“redis”,我發(fā)給你。

預(yù)告:PHP面試??純?nèi)容之Memcache和Redis(3)將于本周五(2019.2-22)更新。

以上內(nèi)容摘自《PHP程序員面試筆試寶典》書籍,該書已在天貓、京東、當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷售。

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

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

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

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

相關(guān)文章

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

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

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

    摘要:自己整理了一篇不同等級(jí)面試都問什么的文章,關(guān)注公眾號(hào)琉憶編程庫,回復(fù)等級(jí),我發(fā)給你。 你好,是我琉憶。今天是周五了,再上一天班就周末了,提前祝大家周末愉快。嘿嘿。這篇文章是本周Memcache和Redis內(nèi)存數(shù)據(jù)庫??嫉膶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)容MemcacheRedis(1)

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

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

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

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

    摘要:繼周一發(fā)布的面試常考內(nèi)容之和后,這是第二篇,感謝你的支持和閱讀。預(yù)告面試??純?nèi)容之和將于本周五更新。以上內(nèi)容摘自程序員面試筆試寶典書籍,該書已在天貓京東當(dāng)當(dāng)?shù)入娚唐脚_(tái)銷售。 你好,是我琉憶。繼周一(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

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

0條評(píng)論

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