学了redis我能拿你做什么
https://blog.csdn.net/qq_36905432/article/details/81121557
很多小伙伴在花時(shí)間學(xué)習(xí)完redis數(shù)據(jù)庫(kù)后,很迷茫.感覺(jué)很空虛,不知道自己學(xué)習(xí)完這東西,能做點(diǎn)什么.從而喪失了繼續(xù)學(xué)習(xí)的動(dòng)力.為了能夠讓大家在學(xué)習(xí)redis的道路上繼續(xù)前行.我覺(jué)得很有必要為大家整理一份簡(jiǎn)單實(shí)用的redis應(yīng)用場(chǎng)景指南.
說(shuō)明:
這篇指南是以工作場(chǎng)景為背景,以項(xiàng)目為引導(dǎo),以redis基本命令為驅(qū)動(dòng)來(lái)展開(kāi)的,讓你學(xué)習(xí)redis的應(yīng)用場(chǎng)景就像讀故事一樣簡(jiǎn)單,閱讀這些故事片段,你就能輕松掌握redis的基本應(yīng)用場(chǎng)景,將其玩弄于鼓掌之上.
什么人適合閱讀這篇文章?
熟悉redis的基本操作命令,理解nosql與sql之間的區(qū)別,但是糾結(jié)于學(xué)完redis我能拿它做什么的初學(xué)者.
什么人不適合閱讀本文?
1: 大牛,老牛
2: 對(duì)文字有密集恐懼癥者
1. 獲取最新的n個(gè)數(shù)據(jù)
為了讓小伙伴更好地理解,我這里結(jié)合示例講解.
示例:
現(xiàn)在你在和訊網(wǎng)黃金頻道上班,項(xiàng)目經(jīng)理讓你負(fù)責(zé)每天在頻道首頁(yè)生成一張數(shù)據(jù)表,來(lái)展示1個(gè)月內(nèi)的國(guó)際黃金的開(kāi)盤(pán)和收盤(pán)價(jià)格.如果我們從mysql數(shù)據(jù)庫(kù)中按時(shí)間排序取出,固然可以.但是你要考慮和訊網(wǎng)的并發(fā)量,和你排序時(shí)對(duì)資源的一個(gè)浪費(fèi)程度.
這個(gè)時(shí)候我們選取redis的列表存取,就顯得很有必要了,我們知道redis有一種隊(duì)列(list)的數(shù)據(jù)結(jié)構(gòu),同時(shí)它還具備先進(jìn)先出的特性.那這樣的話,我去最新的1個(gè)月的數(shù)據(jù)不就信手拈來(lái)么.一個(gè)lrange命令即可簡(jiǎn)單地取出你想要的區(qū)間的值.
2. 獲取 TOP N 的數(shù)據(jù)
接下來(lái)的這個(gè)例子,看標(biāo)題,感覺(jué)跟第1中應(yīng)用差不多,其實(shí)還是有差別的.應(yīng)用1我們是利用列表的先進(jìn)先出的特性,按存取時(shí)間來(lái)取,接下來(lái)我們的這個(gè)示例,就是利用有序集合的特性來(lái)解決實(shí)際問(wèn)題.
現(xiàn)在你受雇于APPLESTORE,項(xiàng)目經(jīng)理要求你在商店首頁(yè),展示下載量排行前30的APP.
這個(gè)時(shí)候,你若能夠想到我們r(jià)edis學(xué)習(xí)過(guò)程中,給大家講到的SortedSet有序集合,那就再好不過(guò)了.我們只需要將每個(gè)APP生成一個(gè)唯一的ID,將其作為集合中成員member,下載數(shù)目作為成員的score.那么當(dāng)你將這個(gè)score插入到有序集合中時(shí),redis就會(huì)按其進(jìn)行大小排序,自然有個(gè)有序的集合就形成了.最終你要取前N或者后N的數(shù)據(jù),就在于你自己了.
3. 設(shè)置精準(zhǔn)的搶購(gòu)時(shí)間
設(shè)置搶購(gòu),促銷時(shí)間,這項(xiàng)技術(shù)在電商領(lǐng)域確實(shí)很實(shí)用.
現(xiàn)在你在阿里的淘寶事業(yè)部上班,領(lǐng)隊(duì)組長(zhǎng)分配你來(lái)完成一個(gè)限時(shí)搶購(gòu)活動(dòng),某商品中午10:00開(kāi)始進(jìn)行搶購(gòu),1小時(shí)后,活動(dòng)結(jié)束.
咿呀,既然限時(shí),要準(zhǔn)確地1個(gè)小時(shí)結(jié)束.這個(gè)時(shí)候我們學(xué)習(xí)redis的過(guò)程中,講到的key的有效期就派上用場(chǎng)了.我們可以將某個(gè)活動(dòng)的key的過(guò)期時(shí)間設(shè)置為過(guò)期時(shí)刻的時(shí)間戳,用戶搶購(gòu)的過(guò)程中并發(fā)是很高的.那么這個(gè)時(shí)候提交的數(shù)據(jù)我們未必就需要立即存入我們的硬盤(pán)數(shù)據(jù)庫(kù).用戶下單時(shí)我們獲取該活動(dòng)的key是否過(guò)期,未過(guò)期,允許用戶下單,訂單數(shù)據(jù)暫時(shí)內(nèi)存緩存.一旦該key失效,禁止用戶下單,同時(shí),我們可以將剛才并發(fā)的那么多筆單進(jìn)行硬盤(pán)數(shù)據(jù)庫(kù)的導(dǎo)入即可.一來(lái)實(shí)現(xiàn)了精準(zhǔn)時(shí)間的設(shè)定,二來(lái),應(yīng)對(duì)了搶購(gòu)的高并發(fā)量.
4. 輕松實(shí)現(xiàn)計(jì)數(shù)器
你目前就職的單位是中央全面深化改革領(lǐng)導(dǎo)小組技術(shù)顧問(wèn)辦公室,在過(guò)去如果全國(guó)人民一起選代表,既浪費(fèi)人力又浪費(fèi)財(cái)力.現(xiàn)在網(wǎng)絡(luò)技術(shù)發(fā)展了,組長(zhǎng)交代由你牽頭開(kāi)發(fā)點(diǎn)贊選人大平臺(tái).
接到這個(gè)項(xiàng)目,你是不是很犯難,13億啊!可能同時(shí)集中在某個(gè)時(shí)間段,點(diǎn)贊,如此大的IO請(qǐng)求.硬盤(pán)數(shù)據(jù)庫(kù)多少有些力不從心.哎,這個(gè)時(shí)候你要運(yùn)用上我們的內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)了,redis中對(duì)key的增incre,減decr不正適合你的需求么.
5. 去除重復(fù)值
去除重復(fù)值,聽(tīng)起來(lái)很熟悉,我們的MySQL不是有unique索引嗎?哦,好吧,我要說(shuō)的是我們r(jià)edis中的對(duì)字符串的set命令更使用.
你現(xiàn)在在下廚房平臺(tái),任職技術(shù)兼策劃.你準(zhǔn)備收集天下美食,苦于不知菜名.網(wǎng)絡(luò)是有魔力的,人名群眾的智慧是無(wú)窮的.你準(zhǔn)備發(fā)動(dòng)全國(guó)的網(wǎng)友們,為你提供菜名,同時(shí)你還不想讓大家發(fā)出相同菜名.
看到如此問(wèn)題,你是否還能想到我們之前在學(xué)習(xí)redis的字符串類型時(shí),說(shuō)到的set命令,我們講默認(rèn)情況,不給其他參數(shù)時(shí),如果我們的key不存在,則創(chuàng)建添加.如果key已經(jīng)存在,則舊值覆蓋新值.既然如此,key值存在,則覆蓋.不正是我們需要的模型么?
6. 利用set命令制作反垃圾系統(tǒng)
很多小伙伴,看到這,蒙了.一個(gè)破set命令什么時(shí)候還能反垃圾了.咦,你應(yīng)該腦洞大一些,再大一些.
上次你制作的統(tǒng)計(jì)菜名系統(tǒng),領(lǐng)導(dǎo)會(huì)上先把你肯定了一番,然后義正言辭地說(shuō),小明啊,你這系統(tǒng)不太符合凈網(wǎng)行動(dòng)的要求啊,有些網(wǎng)友把一些帶有明顯淫穢色情的菜名都提交到了系統(tǒng).還被展示出來(lái)投票,這不荒唐嗎?
嚇的你一陣?yán)浜?這個(gè)時(shí)候你想到了在XX教育高性能架構(gòu)班學(xué)習(xí)的同桌小胖.電話里小胖告訴你,當(dāng)我們使用set命令對(duì)字符串進(jìn)行操作時(shí),給它一個(gè)NX參數(shù),這樣的話只有用戶提交的key不存在時(shí),才會(huì)對(duì)key進(jìn)行操作.你去網(wǎng)上down一個(gè)敏感字匯字典,提前set入庫(kù),不就可以實(shí)現(xiàn)反垃圾了么.聽(tīng)完小胖的指導(dǎo),緊張的你如釋重負(fù).
7. 利用發(fā)布訂閱的中的SUBSCRIBE和PUBLISH命令構(gòu)建實(shí)時(shí)消息推送系統(tǒng)
費(fèi)了老鼻子勁,你終于進(jìn)入了新浪微博事業(yè)部.第二天組長(zhǎng)找到正埋頭苦干的你.小明,咱們微博也要搞個(gè)跟FB一樣一樣的關(guān)注功能,搞大V認(rèn)證,大V一發(fā)消息,趕緊推送給關(guān)注的那群XX,讓XX跟大V趕緊互動(dòng)起來(lái).以此來(lái)提高用戶粘性.組長(zhǎng)走后,"趕緊,推送",這兩個(gè)詞在你的耳畔不時(shí)地回響.
你又想到了小胖,小胖電話里告訴你.redis里有subscribe訂閱和publish發(fā)布功能的.你掛了電話,去自學(xué)it網(wǎng)里一搜索,果不其然.一個(gè)subscribe可以訂閱不同的用戶模型,只要對(duì)應(yīng)的模型有publish實(shí)現(xiàn),訂閱者即可實(shí)時(shí)收到,推送的消息.你雖然不是王大錘,但你也萬(wàn)萬(wàn)沒(méi)想到redis竟然有如此功能.O(∩_∩)O哈哈~
8. 構(gòu)建隊(duì)列系統(tǒng)
忙完微博的事,正準(zhǔn)備收拾東西去擠地鐵的你.突然被組長(zhǎng)叫住了.
小明,你雖然完成了微博關(guān)注和推送的技術(shù)架構(gòu).但是這幾天又有個(gè)新問(wèn)題出現(xiàn)了.因?yàn)镕B用不了,微博用戶暴增.特別是認(rèn)證大V的用戶越來(lái)越多,就連門(mén)口烤紅薯的大爺早上還拽著我說(shuō),給他整個(gè)大V吧,俺不差錢(qián).老板為了緩解認(rèn)證方面的壓力,已經(jīng)開(kāi)始收費(fèi)認(rèn)證了,但是還是擋不住這群XX.趕上過(guò)節(jié)飯點(diǎn),大V們幾乎同時(shí)發(fā)微博,推送服務(wù)器有點(diǎn)壓力.你把這個(gè)問(wèn)題解決了,再走吧,晚點(diǎn)回去打車公司報(bào)銷.然后打完卡他走了.
"同時(shí)發(fā)微博","同時(shí)推送,服務(wù)器壓力大".你從電腦中找到了小胖之前發(fā)給你的那本redis自學(xué)筆記,筆記上說(shuō).我們可以將若干個(gè)需要執(zhí)行的事件加入隊(duì)列,然后按時(shí)間的順序去逐個(gè)逐個(gè)的執(zhí)行.這個(gè)時(shí)候你又想到了一個(gè)提高用戶互動(dòng)性的好辦法.我能不能讓粉絲數(shù)目多的大V的微博優(yōu)先推送呢?畢竟粉絲基數(shù)大,影響大,總能搞出一個(gè)大新聞.既然這樣,我直接使用有序隊(duì)列不就行了.把一個(gè)個(gè)大V的微博推送事件ID存入有序隊(duì)列,同時(shí)依據(jù)粉絲數(shù)給予權(quán)重(或說(shuō)優(yōu)先級(jí)).不就可以達(dá)到我們的需求了么.
9. 緩存
這一點(diǎn)大家應(yīng)該很熟悉了,它可以像memcache一樣充當(dāng)緩存數(shù)據(jù)庫(kù).不過(guò)的它的數(shù)據(jù)類型比memcache多的多,應(yīng)對(duì)場(chǎng)景自然要比memcache豐富的多.比較時(shí)髦的用法是,用其來(lái)緩存會(huì)話哦.
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/9362254.html
總結(jié)
以上是生活随笔為你收集整理的学了redis我能拿你做什么的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 10个常见的Redis面试刁难问题--转
- 下一篇: 2000万日订单背后:美团外卖客户端高可