for 知(zhī)乎鏈接圖标抓取
Redis的(de)應用(yòng)場(chǎγ↕•<ng)景
2022-12-29 2592 作(zuò)者:
字号:【小(xiǎo)】【中】【大(dà)】
分(fēn)享到(dào):

先介紹一(yī)下(xià)Redis

簡介:REmote DIctionary Server(Redis→↔<) 是(shì)一(yī)個(gè)由Salvatoreδ♣ Sanfilippo寫的(de) key-value存儲系統,是(shì£​€α)跨平台的(de)非關系型數(shù)據庫。

Redis是(shì)一(yī)個(gè)開(kāi)源的(d•≤≠'e)使用(yòng)ANSI C語言編寫≈<、遵守BSD協議(yì)、支持網絡、可(kě)基于內(nèi)存、分(<∞✔fēn)布式、可(kě)選持久性的(de)鍵值對(duì)✘← ×(Key-Value)存儲數(shù)據庫, ↑并提供多(duō)種語言的(de)API。

Redis通(tōng)常被稱為(wèi)數(s₩♥hù)據結構服務器(qì),因為(wèi)♠✘←值(value)可(kě)以是(shì)字符串(String)、哈希™↕÷←(Hash)、列表(list)、集合(sets)和(hé)有(&↓yǒu)序集合(sorted sets)等類型。

優勢

1:速度快(kuài),因為(wèi)數(shù)據存在₽≈£γ于內(nèi)存中,類似hashmap的(de)優勢就(j÷∑iù)是(shì)查找和(hé)操作(zuò)的(de)時(shí)間(ji∞φσ↔ān)複雜(zá)度都(dōu)是(shì)o(1)

2:支持豐富的(de)數(shù)據類型,string、list、hash、×™♣set、zset

3:支持事(shì)務,操作(zuò)都(dōu)是(shì) ™→★原子(zǐ)性的(de)。

4:豐富的(de)特性:可(kě)用(yòng♠ φ)于緩存、消息,按key設置過期時(shí)間(≠β↑÷jiān),過期自(zì)動删除

應用(yòng)場(chǎng)景

1、緩存

可(kě)以使用(yòng)String類型

例如(rú):熱(rè)點數(shù)據緩存(例↑ε如(rú)報(bào)表、熱(rè)銷商品),對(duì)象緩存、全頁緩存'  、可(kě)以提升熱(rè)點數(shù)據的(de)訪問(wφφεèn)數(shù)據。

image1.png

2、數(shù)據共享分(fēn)布式

String 類型,因為(wèi) Redis 是(shì)分(fēn)布≤₩¥式的(de)獨立服務,可(kě)以在多(duō)個(gè)應用(yòng)之&→↔間(jiān)共享

例如(rú):分(fēn)布式Session需♦∞σ♣要(yào)引入此依賴

image2.png

3、分(fēn)布式鎖

String 類型setnx方法,隻有(yΩ&$ǒu)不(bù)存在時(shí)才能(néα←₹ng)添加成功,返回true

image3.png

将key 的(de)值設為(wèi)value∑&∏¶ ,當且僅當key不(bù)存在。

若給定的(de) key已經存在,則SETNX不(bù)做(zuò)任‌λ→何動作(zuò)。

4、全局ID

int類型,incrby,利用(yòng)原子(zǐ)性

image4.png

如(rú)果是(shì)分(fēn)庫分(fēn)表的(de)場(chǎn >↑g)景,一(yī)次性拿(ná)一(yī)段。

5、計(jì)數(shù)器(qì)

int類型,incr方法

例如(rú):文(wén)章(zhāng)<₩的(de)閱讀(dú)量、微(wēi)博點贊數(< shù)、允許一(yī)定的(de)延遲,先寫入Redis再定時(s​≤€hí)同步到(dào)數(shù)據庫

image5.png

6、限流

基于redis的(de)數(shù)據結構zset

zset是(shì)set的(de)一(yī)個(gè ♦)升級版本,他(tā)在set的(de)基礎上✔α(shàng)增加了(le)一(yī)個(gè)順序屬性,這(zhè)一 Ω×∑(yī)屬性在添加修改元素的(de)時(shí)候可(kě)以指定,每♠±≠次指定後,zset會(huì)自(zì)動重新按新的(de)值調整順序。可ε₽×(kě)以對(duì)指定鍵的(de)值進行(xíng)排序權>&重的(de)設定,它應用(yòng)排名模塊比較多(duō)。

我們可(kě)以将請(qǐng)求打造成一(yī)個(gè)zse βt數(shù)組,當每一(yī)次請(qǐng)求進來(lái)的(de±↔ )時(shí)候,value保持唯一(yī $←≈),可(kě)以用(yòng)UUID生(sπ•hēng)成,而score可(kě)以用(yòng)當前時(shí)間(j∏★¶✔iān)戳表示,因為(wèi)score我們可(kě)以用(yòng)來λδ₩(lái)計(jì)算(suàn)當前時(s✔σhí)間(jiān)戳之內(nèi)有(yǒ♣§←u)多(duō)少(shǎo)的(de)請(qǐng)求數(shù)量。而zσαset數(shù)據結構也(yě)提供了(le)ra↑ ¶★nge方法讓我們可(kě)以很(hěn)輕易的(de​Ω™)獲取到(dào)2個(gè)時(shí)間£©(jiān)戳內(nèi)有(yǒu)多(duō)少(shǎo)請(qǐ<↑ng)求。

image6.png

7、位統計(jì)

String類型的(de)bitcount(1.6.6的(de)bitmap數₹≠≠(shù)據結構介紹)

image7.png

字符是(shì)以8位二進制(zhì)存儲的 ‍(de)

例如(rú):在線用(yòng)戶統計(jì),留存用(yòng)戶統計(jì∑÷ ∏),支持按位與、按位或等等操作(zuò),計(jì)算(s₩♥✔₩uàn)出7天都(dōu)在線的(de)用(yòng)戶。

8、購(gòu)物(wù)車(chē)

傳統的(de)購(gòu)物(wù)車(chē)實現(xiàn)有(yǒu)很✔‌(hěn)多(duō)種方式,如(rú)session,cooα✘✘₹kie,數(shù)據庫等,如(rú)果用(ε↔yòng)Redis相(xiàng)當于一(yī)個(gè)內(nèi)₽"存數(shù)據庫,可(kě)以用(yòng)來(lái)做(¶ λzuò)緩存,存儲數(shù)據等。

類型用(yòng)String 或hash。所有(yǒu)Str∞γ≥ing可(kě)以做(zuò)的(de)hash都(dōu)可(kě)以做§↓(zuò)。

image8.png

9、用(yòng)戶消息時(shí)間(jiān)線

list,雙向鏈表,直接作(zuò)為(wèi)timeline就(jiù)好β←(hǎo)了(le)。插入有(yǒu)序。

10、消息隊列

List提供了(le)兩個(gè)阻塞的(•$♣σde)彈出操作(zuò):blpop/brpop,可(kě)以設置超時 ∞(shí)時(shí)間(jiān)。

blpop:blpop key1 timeout 移除并獲取列表的(de∞δ)第一(yī)個(gè)元素,如(rú)果列表沒有↔•(yǒu)元素會(huì)阻塞列表直到(dào)等待¥<‌&超時(shí)或發現(xiàn)可(kě)彈出元素為(wèi)止•Ω☆α。

brpop:brpop key1 timeou' →$t 移除并獲取列表的(de)最後一(yī)個(gè)元素,如(rúεα¥)果列表沒有(yǒu)元素會(huì)阻塞列表直到($≈dào)等待超時(shí)或發現(xiàn)可(α>>±kě)彈出元素為(wèi)止。

上(shàng)面的(de)操作(zuò)。其實就(jiù)是(shì)j♣✘$¥ava的(de)阻塞隊列。學習(xí)的(de)東(dōng)西(xī)•​φ越多(duō)。學習(xí)成本越低(dī)。

隊列:先進先除:rpush blpop,左頭右尾,右邊進入隊列,≠≈↔左邊出隊列。

棧:先進後出:rpush brpop。

11、抽獎

移除并返回集合中的(de)一(yī)個(gè)随機(jī)元素&β。

image9.png

返回集合中一(yī)個(gè)或多(duō)個(gè)随機(jī)ε×數(shù)。

image10.png

将所有(yǒu)的(de)獎品通(tōng)過SADD添加到(dào)SE>™✘T集合中,然後通(tōng)過随機(jī)命令獲取對(β&duì)應的(de)獎品即可(kě)。而且,抽獎一(¶≤'≠yī)般是(shì)有(yǒu)時(shí)效性,正好(hǎo)可(kě)以配™γ <合redis的(de)key的(de)失效時φ≈(shí)間(jiān)使用(yòng)。使得(de)抽獎功能( ✔→ néng)很(hěn)完美(měi)的(d&₹e)解決。

12、點贊、簽到(dào)、打卡

假如(rú)上(shàng)面的(de)微(wēi)博ID® ♣是(shì)t1001,用(yòng)戶ID是(shì)u3001

用(yòng) like:t1001 來(lái)維護 t1001₩γ♠  這(zhè)條微(wēi)博的(de)所♦<有(yǒu)點贊用(yòng)戶

點贊了(le)這(zhè)條微(wēi)博:→ ↑​sadd like:t1001 u3001

取消點贊:srem like:t1001 ₹"α<u3001

是(shì)否點贊:sismember like:t1001 u3↓•001

點贊的(de)所有(yǒu)用(yòng)戶:smembers " like:t1001

點贊數(shù):scard like:✔εt1001

相(xiàng)對(duì)于數(shù)據庫簡單很(hěn)多(duō​<☆)

13、商品标簽

使用(yòng)tags:來(lái)給對(duì)象打标簽,✔ 然後可(kě)以直接查找出來(lái)。

image11.png

14、商品篩選

一(yī)個(gè)集合進行(xíng)查找↑™₹

image12.png

多(duō)個(gè)集合進行(xíng)運算(♠₩suàn)是(shì)按照(zhào)順序,一(yī)路(lù)算(su₽ 'àn)下(xià)去(qù)的(de)結果

SDIFF計(jì)算(suàn)差集 ≥₩  

SINTER 計(jì)算(suàn)并δπ集

SUNION 計(jì)算(suàn)交集"γ∞

15、用(yòng)戶關注、推薦模型

實際上(shàng)就(jiù)是(shì)redisΩ♣的(de)交集,并集差集的(de)使用(yòng)交錯(cuò)

舉例:

image13.png

16、排行(xíng)榜

實現(xiàn)這(zhè)個(gè)功能(néng)主要(yào)≥"₽用(yòng)到(dào)的(de) redis 數(shù)據類型是(→αε"shì) redis 的(de)有(yǒu)序集合¥φ∑® zset。zset 是(shì) setσ×‍∑ 類型的(de)一(yī)個(gè)擴展,比原Ω≈有(yǒu)的(de)類型多(duō)了(le)一(yī)個(gè)順序屬性。¥™此屬性在每次插入數(shù)據時(shí)會(huì)自(zì)動調整順序值‍λγ,保證 value 值按照(zhào)一(yī)定順序→♣☆>連續排列。

image14.png

查看(kàn)用(yòng)戶 e 的(de)實際排名 (ZREVRANK÷→♥≥ 為(wèi)降序,ZRANK 為(wèi)升序)、實時(sh✔✔✔×í)分(fēn)數(shù)。


最新标簽
最新更新
我要(yào)試用(yòng)
驗證碼
獎勵領取
驗證碼
關注或聯系我們

微(wēi)信公衆号

業(yè)務咨詢:400-99φ♥βλ69-069(24小(xiǎo)時(shí)服務) 028-860φ♥52918
售後熱(rè)線:028-86052836
公司地(dì)址:成都(dōu)市(shì‍π↕δ)武侯區(qū)天益街(jiē)38号理(lǐ♥•)想中心3棟1810

在線客服
Copyright© 2022天健世紀. All Rights↔ ©Ω Reserved. 京ICP證000000号
for 知(zhī)乎鏈接圖标抓取
×
快(kuài)速定制(zhì)通(tōng)道(dào)
獲取驗證碼
快(kuài)速咨詢