Redis的7個(gè)應(yīng)用場(chǎng)景

一:緩存——熱數(shù)據(jù)

熱點(diǎn)數(shù)據(jù)(經(jīng)常會(huì)被查詢,但是不經(jīng)常被修改或者刪除的數(shù)據(jù))闷愤,首選是使用redis緩存绞旅,畢竟強(qiáng)大到冒泡的QPS和極強(qiáng)的穩(wěn)定性不是所有類似工具都有的,而且相比于memcached還提供了豐富的數(shù)據(jù)類型可以使用亭病,另外,內(nèi)存中的數(shù)據(jù)也提供了AOF和RDB等持久化機(jī)制可以選擇嘶居,要冷罪帖、熱的還是忽冷忽熱的都可選。

結(jié)合具體應(yīng)用需要注意一下:很多人用spring的AOP來構(gòu)建redis緩存的自動(dòng)生產(chǎn)和清除邮屁,過程可能如下:

Select 數(shù)據(jù)庫(kù)前查詢r(jià)edis整袁,有的話使用redis數(shù)據(jù),放棄select 數(shù)據(jù)庫(kù)佑吝,沒有的話坐昙,select 數(shù)據(jù)庫(kù),然后將數(shù)據(jù)插入redis

update或者delete數(shù)據(jù)庫(kù)錢迹蛤,查詢r(jià)edis是否存在該數(shù)據(jù)民珍,存在的話先刪除redis中數(shù)據(jù),然后再update或者delete數(shù)據(jù)庫(kù)中的數(shù)據(jù)

上面這種操作盗飒,如果并發(fā)量很小的情況下基本沒問題嚷量,但是高并發(fā)的情況請(qǐng)注意下面場(chǎng)景:

為了update先刪掉了redis中的該數(shù)據(jù),這時(shí)候另一個(gè)線程執(zhí)行查詢逆趣,發(fā)現(xiàn)redis中沒有蝶溶,瞬間執(zhí)行了查詢SQL,并且插入到redis中一條數(shù)據(jù),回到剛才那個(gè)update語句抖所,這個(gè)悲催的線程壓根不知道剛才那個(gè)該死的select線程犯了一個(gè)彌天大錯(cuò)梨州!于是這個(gè)redis中的錯(cuò)誤數(shù)據(jù)就永遠(yuǎn)的存在了下去,直到下一個(gè)update或者delete田轧。

二:計(jì)數(shù)器

諸如統(tǒng)計(jì)點(diǎn)擊數(shù)等應(yīng)用暴匠。由于單線程,可以避免并發(fā)問題傻粘,保證不會(huì)出錯(cuò)每窖,而且100%毫秒級(jí)性能!爽弦悉。

命令:INCRBY

當(dāng)然爽完了窒典,別忘記持久化,畢竟是redis只是存了內(nèi)存稽莉!

三:隊(duì)列

相當(dāng)于消息系統(tǒng)瀑志,ActiveMQ,RocketMQ等工具類似污秆,但是個(gè)人覺得簡(jiǎn)單用一下還行劈猪,如果對(duì)于數(shù)據(jù)一致性要求高的話還是用RocketMQ等專業(yè)系統(tǒng)。

由于redis把數(shù)據(jù)添加到隊(duì)列是返回添加元素在隊(duì)列的第幾位混狠,所以可以做判斷用戶是第幾個(gè)訪問這種業(yè)務(wù)

隊(duì)列不僅可以把并發(fā)請(qǐng)求變成串行岸霹,并且還可以做隊(duì)列或者棧使用

四:位操作(大數(shù)據(jù)處理)

用于數(shù)據(jù)量上億的場(chǎng)景下,例如幾億用戶系統(tǒng)的簽到将饺,去重登錄次數(shù)統(tǒng)計(jì),某用戶是否在線狀態(tài)等等痛黎。

想想一下騰訊10億用戶予弧,要幾個(gè)毫秒內(nèi)查詢到某個(gè)用戶是否在線,你能怎么做湖饱?千萬別說給每個(gè)用戶建立一個(gè)key掖蛤,然后挨個(gè)記(你可以算一下需要的內(nèi)存會(huì)很恐怖,而且這種類似的需求很多井厌,騰訊光這個(gè)得多花多少錢蚓庭。。)好吧仅仆。這里要用到位操作——使用setbit器赞、getbit、bitcount命令墓拜。

原理是:

redis內(nèi)構(gòu)建一個(gè)足夠長(zhǎng)的數(shù)組港柜,每個(gè)數(shù)組元素只能是0和1兩個(gè)值,然后這個(gè)數(shù)組的下標(biāo)index用來表示我們上面例子里面的用戶id(必須是數(shù)字哈),那么很顯然夏醉,這個(gè)幾億長(zhǎng)的大數(shù)組就能通過下標(biāo)和元素值(0和1)來構(gòu)建一個(gè)記憶系統(tǒng)爽锥,上面我說的幾個(gè)場(chǎng)景也就能夠?qū)崿F(xiàn)。用到的命令是:setbit畔柔、getbit氯夷、bitcount

五:分布式鎖與單線程機(jī)制

驗(yàn)證前端的重復(fù)請(qǐng)求(可以自由擴(kuò)展類似情況),可以通過redis進(jìn)行過濾:每次請(qǐng)求將request Ip靶擦、參數(shù)腮考、接口等hash作為key存儲(chǔ)redis(冪等性請(qǐng)求),設(shè)置多長(zhǎng)時(shí)間有效期奢啥,然后下次請(qǐng)求過來的時(shí)候先在redis中檢索有沒有這個(gè)key秸仙,進(jìn)而驗(yàn)證是不是一定時(shí)間內(nèi)過來的重復(fù)提交

秒殺系統(tǒng),基于redis是單線程特征桩盲,防止出現(xiàn)數(shù)據(jù)庫(kù)“爆破”

全局增量ID生成寂纪,類似“秒殺”

六:最新列表

例如新聞列表頁(yè)面最新的新聞列表,如果總數(shù)量很大的情況下赌结,盡量不要使用select a from A limit 10這種low貨捞蛋,嘗試redis的 LPUSH命令構(gòu)建List,一個(gè)個(gè)順序都塞進(jìn)去就可以啦柬姚。不過萬一內(nèi)存清掉了咋辦拟杉?也簡(jiǎn)單,查詢不到存儲(chǔ)key的話量承,用mysql查詢并且初始化一個(gè)List到redis中就好了搬设。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市撕捍,隨后出現(xiàn)的幾起案子拿穴,更是在濱河造成了極大的恐慌,老刑警劉巖忧风,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件默色,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡狮腿,警方通過查閱死者的電腦和手機(jī)腿宰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缘厢,“玉大人吃度,你說我怎么就攤上這事∶列澹” “怎么了规肴?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我拖刃,道長(zhǎng)删壮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任兑牡,我火速辦了婚禮央碟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘均函。我一直安慰自己亿虽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布苞也。 她就那樣靜靜地躺著洛勉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪如迟。 梳的紋絲不亂的頭發(fā)上收毫,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音殷勘,去河邊找鬼此再。 笑死,一個(gè)胖子當(dāng)著我的面吹牛玲销,可吹牛的內(nèi)容都是我干的输拇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贤斜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼策吠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瘩绒,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤奴曙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后草讶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炉菲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年堕战,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拍霜。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘱丢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祠饺,到底是詐尸還是另有隱情越驻,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站缀旁,受9級(jí)特大地震影響记劈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜并巍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一目木、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懊渡,春花似錦刽射、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肾档,卻和暖如春摹恰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阁最。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工戒祠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人速种。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓姜盈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親配阵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子馏颂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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