成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

選Redis還是Memcache,源碼怎么說?

開發(fā) 開發(fā)工具 后端 Redis
memcache和redis是互聯(lián)網(wǎng)分層架構(gòu)中,最常用的KV緩存。不少同學(xué)在選型的時(shí)候會(huì)糾結(jié),到底是選擇memcache還是redis。

memcache和redis是互聯(lián)網(wǎng)分層架構(gòu)中,最常用的KV緩存。不少同學(xué)在選型的時(shí)候會(huì)糾結(jié),到底是選擇memcache還是redis。

畫外音:不鼓勵(lì)粗暴的實(shí)踐,例如“memcache提供的功能是redis提供的功能的子集,不用想太多,選redis準(zhǔn)沒錯(cuò)”。

雖然redis比memcache更晚出來,且功能確實(shí)也更豐富,但對(duì)于一個(gè)技術(shù)人,了解“所以然”恐怕比“選擇誰”更重要一些。

什么時(shí)候傾向于選擇redis?

業(yè)務(wù)需求決定技術(shù)選型,當(dāng)業(yè)務(wù)有這樣一些特點(diǎn)的時(shí)候,選擇redis會(huì)更加適合。

復(fù)雜數(shù)據(jù)結(jié)構(gòu)

value是哈希,列表,集合,有序集合這類復(fù)雜的數(shù)據(jù)結(jié)構(gòu)時(shí),會(huì)選擇redis,因?yàn)閙c無法滿足這些需求。

最典型的場景,用戶訂單列表,用戶消息,帖子評(píng)論列表等。

持久化

mc無法滿足持久化的需求,只得選擇redis。

但是,這里要提醒的是,真的使用對(duì)了redis的持久化功能么?

千萬不要把redis當(dāng)作數(shù)據(jù)庫用:

  • redis的定期快照不能保證數(shù)據(jù)不丟失
  • redis的AOF會(huì)降低效率,并且不能支持太大的數(shù)據(jù)量

不要期望redis做固化存儲(chǔ)會(huì)比mysql做得好,不同的工具做各自擅長的事情,把redis當(dāng)作數(shù)據(jù)庫用,這樣的設(shè)計(jì)八成是錯(cuò)誤的。

緩存場景,開啟固化功能,有什么利弊?

如果只是緩存場景,數(shù)據(jù)存放在數(shù)據(jù)庫,緩存在redis,此時(shí)如果開啟固化功能:

  • 優(yōu)點(diǎn)是,redis掛了再重啟,內(nèi)存里能夠快速恢復(fù)熱數(shù)據(jù),不會(huì)瞬時(shí)將壓力壓到數(shù)據(jù)庫上,沒有一個(gè)cache預(yù)熱的過程。
  • 缺點(diǎn)是,在redis掛了的過程中,如果數(shù)據(jù)庫中有數(shù)據(jù)的修改,可能導(dǎo)致redis重啟后,數(shù)據(jù)庫與redis的數(shù)據(jù)不一致。

因此,只讀場景,或者允許一些不一致的業(yè)務(wù)場景,可以嘗試開啟redis的固化功能。

天然高可用

redis天然支持集群功能,可以實(shí)現(xiàn)主動(dòng)復(fù)制,讀寫分離。

redis官方也提供了sentinel集群管理工具,能夠?qū)崿F(xiàn)主從服務(wù)監(jiān)控,故障自動(dòng)轉(zhuǎn)移,這一切,對(duì)于客戶端都是透明的,無需程序改動(dòng),也無需人工介入。

而memcache,要想要實(shí)現(xiàn)高可用,需要進(jìn)行二次開發(fā),例如客戶端的雙讀雙寫,或者服務(wù)端的集群同步。

但是,這里要提醒的是,大部分業(yè)務(wù)場景,緩存真的需要高可用么?

  • 緩存場景,很多時(shí)候,是允許cache miss
  • 緩存掛了,很多時(shí)候可以通過DB讀取數(shù)據(jù)

所以,需要認(rèn)真剖析業(yè)務(wù)場景,高可用,是否真的是對(duì)緩存的主要需求?

畫外音:即時(shí)通訊業(yè)務(wù)中,用戶的在線狀態(tài),就有高可用需求。

存儲(chǔ)的內(nèi)容比較大

memcache的value存儲(chǔ),***為1M,如果存儲(chǔ)的value很大,只能使用redis。

什么時(shí)候傾向于memcache?

純KV,數(shù)據(jù)量非常大,并發(fā)量非常大的業(yè)務(wù),使用memcache或許更適合。

這要從mc與redis的底層實(shí)現(xiàn)機(jī)制差異說起。

內(nèi)存分配

memcache使用預(yù)分配內(nèi)存池的方式管理內(nèi)存,能夠省去內(nèi)存分配時(shí)間。

redis則是臨時(shí)申請(qǐng)空間,可能導(dǎo)致碎片。

從這一點(diǎn)上,mc會(huì)更快一些。

虛擬內(nèi)存使用

memcache把所有的數(shù)據(jù)存儲(chǔ)在物理內(nèi)存里。

redis有自己的VM機(jī)制,理論上能夠存儲(chǔ)比物理內(nèi)存更多的數(shù)據(jù),當(dāng)數(shù)據(jù)超量時(shí),會(huì)引發(fā)swap,把冷數(shù)據(jù)刷到磁盤上。

從這一點(diǎn)上,數(shù)據(jù)量大時(shí),mc會(huì)更快一些。

網(wǎng)絡(luò)模型

memcache使用非阻塞IO復(fù)用模型,redis也是使用非阻塞IO復(fù)用模型。

但由于redis還提供一些非KV存儲(chǔ)之外的排序,聚合功能,在執(zhí)行這些功能時(shí),復(fù)雜的CPU計(jì)算,會(huì)阻塞整個(gè)IO調(diào)度。

從這一點(diǎn)上,由于redis提供的功能較多,mc會(huì)更快一些。

線程模型

memcache使用多線程,主線程監(jiān)聽,worker子線程接受請(qǐng)求,執(zhí)行讀寫,這個(gè)過程中,可能存在鎖沖突。

redis使用單線程,雖無鎖沖突,但難以利用多核的特性提升整體吞吐量。

從這一點(diǎn)上,mc會(huì)快一些。

***說兩點(diǎn)

1. 代碼可讀性,代碼質(zhì)量

看過mc和redis的代碼,從可讀性上說,redis是我見過代碼最清爽的軟件,甚至沒有之一,或許簡單是redis設(shè)計(jì)的初衷,編譯redis甚至不需要configure,不需要依賴第三方庫,一個(gè)make就搞定了。

而memcache,可能是考慮了太多的擴(kuò)展性,多系統(tǒng)的兼容性,代碼不清爽,看起來費(fèi)勁。

例如網(wǎng)絡(luò)IO的部分,redis源碼1-2個(gè)文件就搞定了,mc使用了libevent,一個(gè)fd傳過來傳過去,又pipe又線程傳遞的,特別容易把人繞暈。

畫外音:理論上,mc只支持kv,而redis支持了這么多功能,mc性能應(yīng)該高非常多非常多,但實(shí)際并非如此,真的可能和代碼質(zhì)量有關(guān)。

2. 水平擴(kuò)展的支持

不管是mc和redis,服務(wù)端集群沒有天然支持水平擴(kuò)展,需要在客戶端進(jìn)行分片,這其實(shí)對(duì)調(diào)用方并不友好。如果能服務(wù)端集群能夠支持水平擴(kuò)展,會(huì)更***一些。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2021-01-31 18:58:31

redismemcache源碼

2018-01-05 10:48:54

混合云尚陽科技IDC

2018-12-19 09:15:36

SDN軟件定義網(wǎng)絡(luò)廣域網(wǎng)

2025-06-10 02:44:00

RAGAnthropic神經(jīng)網(wǎng)絡(luò)

2019-01-09 08:42:18

2019-10-31 15:45:25

Java薪酬語言

2022-05-05 09:14:41

AlpineDocker鏡像開發(fā)

2020-12-16 18:00:06

數(shù)字貨幣數(shù)據(jù)安全數(shù)字化轉(zhuǎn)型

2015-05-06 13:52:52

微軟外媒

2013-10-28 10:13:53

SDN技術(shù)SDN軟件定義網(wǎng)絡(luò)

2017-03-30 15:01:59

嵌入式

2017-07-13 09:48:22

Hadoop數(shù)據(jù)倉庫

2021-11-09 10:41:34

數(shù)字化轉(zhuǎn)型IT技術(shù)

2021-01-19 05:26:22

Github ActiJenkinsDevOps

2021-01-18 18:30:49

服務(wù)器開發(fā)工具

2018-08-16 14:28:34

2015-05-07 14:37:01

CoreOSAppC紅帽

2020-11-24 06:00:55

PythonPython之父編程語言

2023-07-07 08:15:18

JavaPython編寫

2024-04-12 16:16:19

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美综合一区二区三区 | 毛片在线免费 | 91精品国产综合久久久动漫日韩 | 国产99精品| 极品销魂美女一区二区 | 日本不卡免费新一二三区 | 久久久女 | 久久国产亚洲 | 国产原创在线观看 | 天堂一区在线 | 国产精品欧美一区二区三区不卡 | 欧美日韩精品一区二区天天拍 | 国产一二区视频 | 午夜精品视频一区 | 精品欧美一区二区三区久久久 | 天堂一区二区三区 | 亚洲国产欧美国产综合一区 | 国产成人免费一区二区60岁 | 亚洲成人免费视频在线观看 | 成人久久久久久久久 | 国产精品视频在线播放 | 欧美a区 | 在线观看黄色大片 | 操操操操操 | 欧美精品 在线观看 | 欧美视频在线播放 | 激情的网站 | 国产一区二区三区四区五区3d | 日本特黄特色aaa大片免费 | 欧美成人手机视频 | 亚洲高清视频一区二区 | 999久久久久久久 | 在线视频日韩 | 国产精品不卡 | 精品国产91久久久久久 | 国产精品1区 | 久久综合av | 超级碰在线 | 中文字幕在线精品 | 久久国产精品-久久精品 | 成人av电影免费在线观看 |