Redis應(yīng)用案例解析

以下案例摘自2018年下半年軟件職業(yè)考試,并由此展開redis相關(guān)知識,持續(xù)更新中

【背景說明】

某企業(yè)是為城市高端用戶提供高品質(zhì)蔬菜生鮮服務(wù)的初創(chuàng)企業(yè)怜械,創(chuàng)業(yè)初期為快速開展業(yè)務(wù)缕允,該企業(yè)采用輕量型的開發(fā)架構(gòu)(腳本語言+關(guān)系型數(shù)據(jù)庫)研制了一套業(yè)務(wù)系統(tǒng)障本。業(yè)務(wù)開展后受到用戶普遍歡迎响鹃,用戶數(shù)和業(yè)務(wù)數(shù)量迅速增長买置,原有的數(shù)據(jù)庫服務(wù)器已不能滿足高度并發(fā)的業(yè)務(wù)要求。為此蓉冈,該企業(yè)成立了專門的研發(fā)團(tuán)隊(duì)來解決該問題寞酿。

張工建議重新開發(fā)整個(gè)系統(tǒng)怕膛, 采用新的服務(wù)器和數(shù)據(jù)架構(gòu)褐捻,解決當(dāng)前問題的同時(shí)為日后的擴(kuò)展提供支持柠逞。但是,李工認(rèn)為張工的方案開發(fā)周期過長逗鸣,投入過大撒璧,當(dāng)前應(yīng)該在改動(dòng)盡量小的前提下解決該問題卿樱。李工認(rèn)為訪問量很大的只是部分?jǐn)?shù)據(jù),建議采用緩存工具M(jìn)emCache來減輕數(shù)據(jù)庫服務(wù)器的壓力萨蚕,這樣開發(fā)量小岳遥,開發(fā)周期短浩蓉,比較適合初創(chuàng)公司帮坚,同時(shí)將來也可以通過集群進(jìn)行擴(kuò)展试和。然而阅悍,劉工又認(rèn)為李工的方案中存在數(shù)據(jù)可靠性和一致性問題节视,在宕機(jī)時(shí)容易丟失交易數(shù)據(jù),建議采用Redis來解決問題霍掺。在經(jīng)過充分討論杆烁,該公司最終決定采用劉工的方案兔魂。

1.分布式數(shù)據(jù)庫緩存的基本概念

在李工和劉工的方案中举娩,均采用分布式數(shù)據(jù)庫緩存技術(shù)來解決問題。請說明分布式數(shù)據(jù)庫緩存的基本概念遂唧。

答:所謂的分布式數(shù)據(jù)庫緩存就是將不同的數(shù)據(jù)放在不同的緩存服務(wù)器上蠢箩,獲取數(shù)據(jù)時(shí)需要根據(jù)路由從不同的服務(wù)器上獲取。

2.表 MemCache與Redis能力比較

Memcache Redis
網(wǎng)絡(luò)IO模型 多線程逻谦,非阻塞IO復(fù)用的網(wǎng)絡(luò)模型 redis使用單線程的IO復(fù)用模型
數(shù)據(jù)類型 簡單key/value Redis 有 5 種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
持久性 不支持 支持
分布式存儲(chǔ) 支持 多種方式邦马,主從滋将,Sentinel随闽、Cluster等
多線程支持 支持 不支持
內(nèi)存管理 Memcached默認(rèn)使用Slab Allocation機(jī)制管理內(nèi)存 Redis通過定義一個(gè)數(shù)組來記錄所有的內(nèi)存分配情況
事務(wù)支持 有限支持

3.說明數(shù)據(jù)可靠性和不一致問題產(chǎn)生等原因

劉工認(rèn)為李工的方案存在數(shù)據(jù)可靠性和一致性的問題掘宪,請說明原因魏滚。

4.簡述數(shù)據(jù)同步方案

為避免數(shù)據(jù)可靠性和一致性的問題鼠次,劉工的方案采用Redis作為數(shù)據(jù)庫緩存芋齿,請說明基本的Redis與原有關(guān)系數(shù)據(jù)庫的數(shù)據(jù)同步方案沟突。

5.簡述Redis分布式存儲(chǔ)的2種常見方案

  • codis

6.簡述Redis集群切片的幾種常見方式惠拭。

Redis Sentinal著眼于高可用,在master宕機(jī)時(shí)會(huì)自動(dòng)將slave提升為master聂示,繼續(xù)提供服務(wù)鱼喉。

Redis Cluster著眼于擴(kuò)展性趋观,在單個(gè)redis內(nèi)存不足時(shí)编曼,使用Cluster進(jìn)行分片存儲(chǔ)剩辟。

Codis 將所有的 key 默認(rèn)劃分為 1024 個(gè)槽位(slot)熊户,它首先對客戶端傳過來的 key 進(jìn)行 crc32 運(yùn)算計(jì)算哈希值嚷堡,再將 hash 后的整數(shù)值對 1024 這個(gè)整數(shù)進(jìn)行取模得到一個(gè)余數(shù)麦到,這個(gè)余數(shù)就是對應(yīng) key 的槽位瓶颠。
每個(gè)槽位都會(huì)唯一映射到后面的多個(gè) Redis 實(shí)例之一粹淋,Codis 會(huì)在內(nèi)存維護(hù)槽位和 Redis 實(shí)例的映射關(guān)系桃移。這樣有了上面 key 對應(yīng)的槽位借杰,那么它應(yīng)該轉(zhuǎn)發(fā)到哪個(gè) Redis 實(shí)例就很明確了蔗衡。

hash = crc32(command.key)
slot_index = hash % 1024
redis = slots[slot_index].redis
redis.do(command)

槽位數(shù)量默認(rèn)是1024逼纸,它是可以配置的杰刽,如果集群節(jié)點(diǎn)比較多贺嫂,建議將這個(gè)數(shù)值配置大一些,比如2048、4096寞射。

附加 1.redis 有哪些數(shù)據(jù)淘汰機(jī)制桥温?

Redis提供了下面幾種淘汰策略供用戶選擇,其中默認(rèn)的策略為noeviction策略:

noeviction:禁止驅(qū)逐數(shù)據(jù)掏觉。當(dāng)內(nèi)存使用達(dá)到閾值的時(shí)候澳腹,所有引起申請內(nèi)存的命令會(huì)報(bào)錯(cuò)。(注意是寫請求返回錯(cuò)誤羊娃,讀請求可以正常執(zhí)行)
allkeys-lru:在主鍵空間中邮利,優(yōu)先移除最近未使用的key。
volatile-lru:在設(shè)置了過期時(shí)間的鍵空間中祷愉,優(yōu)先移除最近未使用的key。
allkeys-random:在主鍵空間中订讼,隨機(jī)移除某個(gè)key。
volatile-random:在設(shè)置了過期時(shí)間的鍵空間中脖苏,隨機(jī)移除某個(gè)key。
volatile-ttl:在設(shè)置了過期時(shí)間的鍵空間中亦歉,具有更早過期時(shí)間的key優(yōu)先移除。

擴(kuò)展閱讀

【redis常見面試問題】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瑰剃,更是在濱河造成了極大的恐慌粤剧,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件世囊,死亡現(xiàn)場離奇詭異,居然都是意外死亡晒衩,警方通過查閱死者的電腦和手機(jī)嗤瞎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來听系,“玉大人猫胁,你說我怎么就攤上這事□诵浚” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵届惋,是天一觀的道長髓帽。 經(jīng)常有香客問我,道長脑豹,這世上最難降的妖魔是什么郑藏? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瘩欺,結(jié)果婚禮上必盖,老公的妹妹穿的比我還像新娘。我一直安慰自己俱饿,他們只是感情好歌粥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拍埠,像睡著了一般失驶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枣购,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天嬉探,我揣著相機(jī)與錄音擦耀,去河邊找鬼。 笑死涩堤,一個(gè)胖子當(dāng)著我的面吹牛眷蜓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胎围,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼吁系,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痊远?” 一聲冷哼從身側(cè)響起垮抗,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碧聪,沒想到半個(gè)月后冒版,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逞姿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年辞嗡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滞造。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡续室,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谒养,到底是詐尸還是另有隱情挺狰,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布买窟,位于F島的核電站丰泊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏始绍。R本人自食惡果不足惜瞳购,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亏推。 院中可真熱鬧学赛,春花似錦、人聲如沸吞杭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芽狗。三九已至缠捌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背曼月。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工谊却, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哑芹。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓炎辨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聪姿。 傳聞我的和親對象是個(gè)殘疾皇子碴萧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容