什么是分布式系統(tǒng) 為什么要用redis,redis有哪些優(yōu)缺點(diǎn)?redis如何實(shí)現(xiàn)擴(kuò)容?
為什么要用redis,redis有哪些優(yōu)缺點(diǎn)?redis如何實(shí)現(xiàn)擴(kuò)容?Redis等鍵值緩存產(chǎn)品有以下三個(gè)特點(diǎn):Redis支持?jǐn)?shù)據(jù)持久化,可以將數(shù)據(jù)保存在磁盤內(nèi)存中,重啟時(shí)可以重新加載使用。Redis不
為什么要用redis,redis有哪些優(yōu)缺點(diǎn)?redis如何實(shí)現(xiàn)擴(kuò)容?
Redis等鍵值緩存產(chǎn)品有以下三個(gè)特點(diǎn):Redis支持?jǐn)?shù)據(jù)持久化,可以將數(shù)據(jù)保存在磁盤內(nèi)存中,重啟時(shí)可以重新加載使用。Redis不僅支持簡(jiǎn)單的鍵值數(shù)據(jù),還提供list、set、Zset、hash等數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)。Redis支持?jǐn)?shù)據(jù)備份,即主從模式下的數(shù)據(jù)備份。Redis具有極高的性能。C redis可以讀110000次/s,寫81000次/s。豐富的數(shù)據(jù)類型C redis支持二進(jìn)制大小寫的字符串、列表、哈希、集合和有序集合數(shù)據(jù)類型操作。原子C redis的所有操作都是原子的。同時(shí),redis還支持合并多個(gè)操作后的原子執(zhí)行。富特性C redis還支持發(fā)布/訂閱、通知、密鑰過期等特性。
為啥Redis/Mongo這么快,就不能直接替代mysql嗎?
你好,我是一名互聯(lián)網(wǎng)行業(yè)開發(fā)工程師,同時(shí)也是高質(zhì)量vlog領(lǐng)域的創(chuàng)造者。歡迎關(guān)注我
!目前互聯(lián)網(wǎng)緩存中間件大多使用redis、mongodb等NoSQL數(shù)據(jù)庫(kù),解決方案比較成熟。但是為什么要使用關(guān)系數(shù)據(jù)庫(kù)呢?讓我們談?wù)勎业睦斫狻?/p>
有些“上古”程序員一直堅(jiān)持反對(duì)使用redis怎么辦?
分享老板的答案似乎是合理的。
不要告訴我們是否使用redis。你必須告訴我們你為什么要使用redis。沒有redis的業(yè)務(wù)怎么了?世界上沒有免費(fèi)的午餐。如果不直接使用頭部緩存/NoSQL,可能會(huì)帶來越來越嚴(yán)重的問題。
單個(gè)數(shù)據(jù)庫(kù)的最大優(yōu)點(diǎn)是易于實(shí)現(xiàn)事務(wù),并由數(shù)據(jù)庫(kù)本身保證。舉個(gè)簡(jiǎn)單的例子,要下訂單,需要扣除庫(kù)存并插入訂單條目。如果inventory和order都是數(shù)據(jù)庫(kù)表?xiàng)l目,那么這個(gè)事務(wù)是無(wú)可挑剔的。如果庫(kù)存在redis中,訂單條目是mysql,通常需要先寫redis,成功后再寫數(shù)據(jù)庫(kù)。如果您寫數(shù)據(jù)庫(kù)失敗,需要回滾redis,如果由于網(wǎng)絡(luò)或其他原因回滾失敗,將再扣減一個(gè)存貨。不要認(rèn)為這些事情很容易解決。事務(wù)處理的復(fù)雜性遠(yuǎn)遠(yuǎn)超出您的想象。例如,當(dāng)您編寫mysql時(shí),您在提交時(shí)就失去了連接。你無(wú)法判斷提交是成功還是失敗。你的redis是不是在倒退?
因此,當(dāng)您引入一個(gè)新層時(shí),您必須弄清楚您必須使用cache/NoSQL的目的以及您可以接受的一致性模型。否則,你就要出丑了。
Redis內(nèi)存為什么不宜過大?
1. Redis是一個(gè)單線程模型。如果內(nèi)存消耗太大,一般來說,鍵或值太多。當(dāng)一臺(tái)機(jī)器上有太多的鑰匙時(shí),不利于性能的優(yōu)化。
2. 如果內(nèi)存由于值太大而過大,會(huì)對(duì)性能產(chǎn)生較大影響。讀取值時(shí),其他請(qǐng)求處于等待狀態(tài)。如果該值占用太多內(nèi)存,則讀取速度會(huì)很慢。這表示應(yīng)該將該值拆分為幾個(gè)
3。redis
的持久性是通過fork實(shí)現(xiàn)的。fork雖然采用了寫時(shí)拷貝,但fork之后仍有成本,內(nèi)存不足,使用swap時(shí)性能會(huì)大大降低。
以上都是極端優(yōu)化的問題。如果你的并發(fā)性很小,那沒關(guān)系。
達(dá)到物理網(wǎng)卡上限,突然幾十萬(wàn)的請(qǐng)求訪問Redis的某個(gè)key如何解決?
對(duì)于手持4T redis實(shí)例組,突發(fā)請(qǐng)求的峰值為500000 ops。由于mget的廣泛使用,每秒實(shí)際請(qǐng)求數(shù)百萬(wàn)個(gè)密鑰。
萬(wàn)兆網(wǎng)絡(luò),物理網(wǎng)卡不是瓶頸,CPU不是,設(shè)計(jì)不好容易成為瓶頸。
用戶主要是kV,有少量的使用和列表設(shè)置
在我的印象中,標(biāo)題中提到的人是阿里巴巴P9。在我個(gè)人的認(rèn)知中,阿里巴巴P8相當(dāng)于高級(jí)架構(gòu)師的級(jí)別,所以我覺得沒有必要去他的級(jí)別。一般來說,阿里云P8以上的平臺(tái)可以將redis、nginx等中間件的性能提高幾個(gè)數(shù)量級(jí),相比開源版本。你不是在做阿里云嗎?
那就想想吧。他們可以將開源版本的性能優(yōu)化幾個(gè)數(shù)量級(jí)。這個(gè)前提不是他們熟悉中間件的核心實(shí)現(xiàn),而是可以完善相關(guān)的設(shè)計(jì)和實(shí)現(xiàn)。因此,負(fù)責(zé)維護(hù)商用阿里云redis服務(wù)和負(fù)載均衡服務(wù)的技術(shù)人員編寫一個(gè)功能相似的新中間件并不困難。
第三,開源項(xiàng)目多,頂級(jí)開源項(xiàng)目少。能做的頂級(jí)開源項(xiàng)目不一定是技術(shù)強(qiáng),很多時(shí)候運(yùn)氣好一點(diǎn),大浪淘沙,就在幾年前,競(jìng)品社區(qū)做得不好,版本停止迭代等原因,導(dǎo)致最后幾個(gè)中間價(jià)脫穎而出,所以new不是一個(gè)中間件,很難建立、維護(hù)和開發(fā)redis開發(fā)者生態(tài)系統(tǒng)和nginx開發(fā)者生態(tài)系統(tǒng)
最后,目前,這些頂級(jí)開源中間件的作者或團(tuán)隊(duì)都是眾神。與這些世界頂級(jí)神相比,阿里巴巴P8確實(shí)有很多不同的層次。但這些偉大的神之所以成為偉大的神,是因?yàn)樗麄儎?chuàng)造了沒有redis的redis,發(fā)明了沒有nginx的nginx。印度的制藥工業(yè)非常發(fā)達(dá),可以生產(chǎn)比中國(guó)更多的藥品,但印度的制藥技術(shù)非常發(fā)達(dá)嗎?不,印度只能合法復(fù)制國(guó)際先進(jìn)制藥企業(yè)在國(guó)內(nèi)的研究成果。所以在redis已經(jīng)到位,功能參數(shù)和架構(gòu)非常清晰的前提下,說P8有能力還是有點(diǎn)保守的。一些有才華的年輕P7在有機(jī)會(huì)的時(shí)候也可以阻止它,但是復(fù)制一個(gè)開源軟件有什么意義呢?
(在評(píng)論中,不少同學(xué)質(zhì)疑阿里的實(shí)力還是國(guó)內(nèi)技術(shù)人員。雖然我也是一個(gè)泥瓦匠,但我還是要說,中國(guó)的便利程度與世界領(lǐng)先水平有明顯差距,但在互聯(lián)網(wǎng)技術(shù)領(lǐng)域,差距并不是那么明顯。至少,在互聯(lián)網(wǎng)技術(shù)領(lǐng)域,目前只有中國(guó)和美國(guó)排在第二位,中國(guó)是唯一能夠在互聯(lián)網(wǎng)技術(shù)各個(gè)方面挑戰(zhàn)美國(guó)的國(guó)家。如果中美關(guān)系繼續(xù)惡化,包括GitHub和Apache在內(nèi)的各種組織關(guān)閉中國(guó),中國(guó)將迅速形成相應(yīng)的新生態(tài),國(guó)內(nèi)某項(xiàng)互聯(lián)網(wǎng)技術(shù)被國(guó)外封鎖,大規(guī)模中斷業(yè)務(wù),國(guó)內(nèi)互聯(lián)網(wǎng)企業(yè)將不提供服務(wù))