日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

redis的7个应用场景

發(fā)布時(shí)間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis的7个应用场景 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:https://www.cnblogs.com/NiceCui/p/7794659.html

一:緩存——熱數(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來(lái)構(gòu)建redis緩存的自動(dòng)生產(chǎn)和清除,過(guò)程可能如下:

  • Select 數(shù)據(jù)庫(kù)前查詢r(jià)edis,有的話使用redis數(shù)據(jù),放棄select 數(shù)據(jù)庫(kù),沒(méi)有的話,select 數(shù)據(jù)庫(kù),然后將數(shù)據(jù)插入redis

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

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

為了update先刪掉了redis中的該數(shù)據(jù),這時(shí)候另一個(gè)線程執(zhí)行查詢,發(fā)現(xiàn)redis中沒(méi)有,瞬間執(zhí)行了查詢SQL,并且插入到redis中一條數(shù)據(jù),回到剛才那個(gè)update語(yǔ)句,這個(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ā)問(wèn)題,保證不會(huì)出錯(cuò),而且100%毫秒級(jí)性能!爽。

命令:INCRBY

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


三:隊(duì)列

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

  • 由于redis把數(shù)據(jù)添加到隊(duì)列是返回添加元素在隊(duì)列的第幾位,所以可以做判斷用戶是第幾個(gè)訪問(wèn)這種業(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è)用戶是否在線,你能怎么做?千萬(wàn)別說(shuō)給每個(gè)用戶建立一個(gè)key,然后挨個(gè)記(你可以算一下需要的內(nèi)存會(huì)很恐怖,而且這種類似的需求很多,騰訊光這個(gè)得多花多少錢(qián)。。)好吧。這里要用到位操作——使用setbit、getbit、bitcount命令。

原理是:

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


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

  • 驗(yàn)證前端的重復(fù)請(qǐng)求(可以自由擴(kuò)展類似情況),可以通過(guò)redis進(jìn)行過(guò)濾:每次請(qǐng)求將request Ip、參數(shù)、接口等hash作為key存儲(chǔ)redis(冪等性請(qǐng)求),設(shè)置多長(zhǎng)時(shí)間有效期,然后下次請(qǐng)求過(guò)來(lái)的時(shí)候先在redis中檢索有沒(méi)有這個(gè)key,進(jìn)而驗(yàn)證是不是一定時(shí)間內(nèi)過(guò)來(lá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)去就可以啦。不過(guò)萬(wàn)一內(nèi)存清掉了咋辦?也簡(jiǎn)單,查詢不到存儲(chǔ)key的話,用mysql查詢并且初始化一個(gè)List到redis中就好了。


七:排行榜

誰(shuí)得分高誰(shuí)排名往上。命令:ZADD(有續(xù)集,sorted set)

最近在研究股票,發(fā)現(xiàn)量化交易是個(gè)非常好的辦法,通過(guò)臆想出來(lái)規(guī)律,用程序?qū)v史數(shù)據(jù)進(jìn)行驗(yàn)證,來(lái)判斷這個(gè)臆想出來(lái)的規(guī)律是否有效,這玩意真牛!有沒(méi)有哪位玩這個(gè)的給我留個(gè)言,交流一下唄。

轉(zhuǎn)載于:https://www.cnblogs.com/fengff/p/9004473.html

總結(jié)

以上是生活随笔為你收集整理的redis的7个应用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。