宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產(chǎn)品動(dòng)態(tài)
精選推薦

Redis最常見的5種應(yīng)用場景

管理 管理 編輯 刪除

緩存(Cache)

Redis的第一個(gè)應(yīng)用場景是Redis作為緩存對(duì)象來加速Web應(yīng)用的訪問。

在該場景下,有一些存儲(chǔ)于數(shù)據(jù)庫中的數(shù)據(jù)會(huì)被頻繁訪問,如果頻繁的訪問數(shù)據(jù)庫,數(shù)據(jù)庫負(fù)載會(huì)升高,同時(shí)由于數(shù)據(jù)庫IO比較慢,應(yīng)用程序的響應(yīng)會(huì)比較差。此時(shí),如果引入Redis來存儲(chǔ)這些被頻繁訪問的數(shù)據(jù),就可以有效的降低數(shù)據(jù)庫的負(fù)載,同時(shí)提高應(yīng)用程序的請(qǐng)求響應(yīng)。

#會(huì)話存儲(chǔ)(Session)

使用Redis來存儲(chǔ)會(huì)話(Session)數(shù)據(jù),可以實(shí)現(xiàn)在無狀態(tài)的服務(wù)器之間共享用戶相關(guān)的狀態(tài)數(shù)據(jù)數(shù)據(jù)。

當(dāng)用戶登錄Web應(yīng)用時(shí)候,將會(huì)話數(shù)據(jù)存儲(chǔ)于Redis,并將唯一的會(huì)話ID(Session ID)返回到客戶端的Cookie中。當(dāng)用戶再向應(yīng)用發(fā)送請(qǐng)求時(shí),會(huì)將此會(huì)話ID包含在請(qǐng)求中。無狀態(tài)的Web服務(wù)器,根據(jù)這個(gè)會(huì)話ID從Redis中搜索相關(guān)的會(huì)話數(shù)據(jù)來進(jìn)一步請(qǐng)求處理。

這里需要注意的是,Redis是內(nèi)存數(shù)據(jù)庫,如果采用單實(shí)例部署。那么當(dāng)Redis服務(wù)器故障重啟之后,所有的Session會(huì)話會(huì)消失,用戶不得不重新登錄來獲取新的Session。所以,當(dāng)拿Redis來存儲(chǔ)Session的時(shí)候,建議采用主從的集群模式open in new window來部署。這樣,即使主服務(wù)器掛了,馬上有從庫接管流量,不影響用戶的使用。

#分布式鎖(Distributed Lock)

當(dāng)我們在應(yīng)用中部署了多個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)需要操作同一個(gè)資源的時(shí)候會(huì)存在競爭。此時(shí),我們可以使用Redis來作為分布式鎖,以協(xié)調(diào)多個(gè)節(jié)點(diǎn)對(duì)共享資源的操作。

這里主要是用Redis的原子操作命令:SETNX,該命令僅允許key不存在的時(shí)候才能設(shè)置key。

下圖展示了一個(gè)簡單用例。Client 1通過SETNX命令嘗試創(chuàng)建lock 1234abcd。如果當(dāng)前還沒有這個(gè)key,那么將返回1。Client 1獲得鎖,就可以執(zhí)行對(duì)共享資源的操作,操作完成之后,刪除剛剛創(chuàng)建的lock(釋放分布式鎖)。如果Client 1在執(zhí)行SETNX命令的時(shí)候,返回了0,說明有其他客戶端占用了這key,那么等待一段時(shí)間(等其他節(jié)點(diǎn)釋放)之后再嘗試。

上面這個(gè)簡單實(shí)現(xiàn)雖然可以滿足很多用例,但它并不具備良好的容錯(cuò)機(jī)制。如果要在生產(chǎn)上是用的話,更推薦采用一些更高質(zhì)量的分布式鎖實(shí)現(xiàn)。比如,Java平臺(tái)的話,可以選擇:Redisson.

#速率限制器(Rate Limiter)

由于Redis提供了計(jì)數(shù)器功能,所以我們可以通過該能力,配合超時(shí)時(shí)間,來實(shí)現(xiàn)速率限制器,最常見的場景就是服務(wù)端是用的請(qǐng)求限流。

一個(gè)基本的限速實(shí)現(xiàn)如下圖:

根據(jù)用戶id或者ip來作為key,使用INCR命令來記錄用戶的請(qǐng)求數(shù)量。然后將該請(qǐng)求數(shù)量與允許的請(qǐng)求上限數(shù)量做比較,只有低于限制的時(shí)候,才會(huì)執(zhí)行請(qǐng)求處理。如果超過限制,就拒絕請(qǐng)求。

同時(shí),請(qǐng)求數(shù)量的計(jì)數(shù)器需要設(shè)置一個(gè)時(shí)間窗口,比如:1分鐘。也就是沒過一分鐘時(shí)間,計(jì)數(shù)器將被清零,重新計(jì)數(shù)。所以,當(dāng)一個(gè)時(shí)間窗口中被限流之后,等到下一個(gè)時(shí)間窗口,就能恢復(fù)繼續(xù)請(qǐng)求。以實(shí)現(xiàn)限制速率的效果。

除了時(shí)間窗算法之外,漏桶算法也能通過Redis來實(shí)現(xiàn)。

#排行榜(Rank/Leaderboard)

由于Redis提供了排序集合(Sorted Sets)的功能,所以很多游戲應(yīng)用采用Redis來實(shí)現(xiàn)各種排行榜功能。

Sorted Sets

排序集合是唯一元素(比如:用戶id)的集合,每個(gè)元素按分?jǐn)?shù)排序,這樣可以快速的按分?jǐn)?shù)來檢索元素

#小結(jié)

Redis的應(yīng)用非常廣泛,這里僅總結(jié)了一些常見的用法。除此之外,還有很多有意思的應(yīng)用,這取決于業(yè)務(wù)場景。大家可以舉一反三。

請(qǐng)登錄后查看

CRMEB 最后編輯于2024-12-25 16:38:59

快捷回復(fù)
回復(fù)
回復(fù)
回復(fù)({{post_count}}) {{!is_user ? '我的回復(fù)' :'全部回復(fù)'}}
排序 默認(rèn)正序 回復(fù)倒序 點(diǎn)贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}}
沙發(fā) 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暫無簡介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復(fù) {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復(fù)' : '回復(fù)'}}
刪除
回復(fù)
回復(fù)
查看更多
打賞
已打賞¥{{reward_price}}
1158
{{like_count}}
{{collect_count}}
添加回復(fù) ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
{{item.label}} 加精
{{item.label}} {{item.label}} 板塊推薦 常見問題 產(chǎn)品動(dòng)態(tài) 精選推薦 首頁頭條 首頁動(dòng)態(tài) 首頁推薦
取 消 確 定
回復(fù)
回復(fù)
問題:
問題自動(dòng)獲取的帖子內(nèi)容,不準(zhǔn)確時(shí)需要手動(dòng)修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當(dāng)前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請(qǐng)輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認(rèn)打賞

微信登錄/注冊

切換手機(jī)號(hào)登錄

{{ bind_phone ? '綁定手機(jī)' : '手機(jī)登錄'}}

{{codeText}}
切換微信登錄/注冊
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服