溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何掌握Redis場(chǎng)景設(shè)計(jì)

發(fā)布時(shí)間:2021-10-26 13:51:59 來(lái)源:億速云 閱讀:140 作者:iii 欄目:web開發(fā)

這篇文章主要講解了“如何掌握Redis場(chǎng)景設(shè)計(jì)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何掌握Redis場(chǎng)景設(shè)計(jì)”吧!

一、常用指令

接下來(lái)看看每個(gè)數(shù)據(jù)結(jié)構(gòu)常用的指令有哪些,我們用一張表比較清晰的展示:

如何掌握Redis場(chǎng)景設(shè)計(jì)

二、場(chǎng)景解析

1.1string存儲(chǔ)

如何掌握Redis場(chǎng)景設(shè)計(jì)

1.2String 類型使用場(chǎng)景

場(chǎng)景一:商品庫(kù)存數(shù)

從業(yè)務(wù)上,商品庫(kù)存數(shù)據(jù)是熱點(diǎn)數(shù)據(jù),交易行為會(huì)直接影響庫(kù)存。而 Redis 自身 String 類型提供了:

  1. set goods_id 10; 設(shè)置 id 為 good_id 的商品的庫(kù)存初始值為 10;

  2. decr goods_id; 當(dāng)商品被購(gòu)買時(shí)候,庫(kù)存數(shù)據(jù)減 1。

依次類推的場(chǎng)景:商品的瀏覽次數(shù),問(wèn)題或者回復(fù)的點(diǎn)贊次數(shù)等。這種計(jì)數(shù)的場(chǎng)景都可以考慮利用 Redis 來(lái)實(shí)現(xiàn)。

場(chǎng)景二:時(shí)效信息存儲(chǔ)

Redis 的數(shù)據(jù)存儲(chǔ)具有自動(dòng)失效能力。也就是存儲(chǔ)的 key-value 可以設(shè)置過(guò)期時(shí)間:set(key, value, expireTime)。

比如,用戶登錄某個(gè) App 需要獲取登錄驗(yàn)證碼, 驗(yàn)證碼在 30 秒內(nèi)有效。那么我們就可以使用 String 類型存儲(chǔ)驗(yàn)證碼,同時(shí)設(shè)置 30 秒的失效時(shí)間。

如何掌握Redis場(chǎng)景設(shè)計(jì)

2.1hash存儲(chǔ)數(shù)據(jù)

如何掌握Redis場(chǎng)景設(shè)計(jì)

2.2Hash 類型使用場(chǎng)景

Redis 在存儲(chǔ)對(duì)象(例如:用戶信息)的時(shí)候需要對(duì)對(duì)象進(jìn)行序列化轉(zhuǎn)換然后存儲(chǔ)。

還有一種形式,就是將對(duì)象數(shù)據(jù)轉(zhuǎn)換為 JSON 結(jié)構(gòu)數(shù)據(jù),然后存儲(chǔ) JSON 的字符串到 Redis。

對(duì)于一些對(duì)象類型,還有一種比較方便的類型,那就是按照 Redis 的 Hash 類型進(jìn)行存儲(chǔ)。

例如,我們存儲(chǔ)一些網(wǎng)站用戶的基本信息, 我們可以使用:

這樣就存儲(chǔ)了一個(gè)用戶基本信息,存儲(chǔ)信息有:{name : 小明, phone : “123456”,sex : “男”}

當(dāng)然這種類似場(chǎng)景還非常多, 比如存儲(chǔ)訂單的數(shù)據(jù),產(chǎn)品的數(shù)據(jù),商家基本信息等。以淘寶購(gòu)物車為主

如何掌握Redis場(chǎng)景設(shè)計(jì)

2.3實(shí)現(xiàn)信息存儲(chǔ)的優(yōu)缺點(diǎn)

1.原生:

  • set user: 1:name james;

  • set user:1:age 23;

  • set user:1:sex boy;

優(yōu)點(diǎn):簡(jiǎn)單直觀,每個(gè)鍵對(duì)應(yīng)一個(gè)值

缺點(diǎn):鍵數(shù)過(guò)多,占用內(nèi)存多,用戶信息過(guò)于分散,不用于生產(chǎn)環(huán)境

2.將對(duì)象序列化存入

redis set user:1 serial ize (userInfo);

優(yōu)點(diǎn):編程簡(jiǎn)單,若使用序列化合理內(nèi)存使用率高

缺點(diǎn):序列化與反序列化有一定開銷,更新屬性時(shí)需要把userInfo全取出來(lái)進(jìn)行反序列化,更新后再序列化到redis

3.hash存儲(chǔ):

hmset user:1 name james age 23 sex boy

優(yōu)點(diǎn):簡(jiǎn)單直觀,使用合理可減少內(nèi)存空間消耗

缺點(diǎn):要控制ziplist 與hashtable兩種編碼轉(zhuǎn)換,Mhashtable會(huì)消耗更多內(nèi)存。

3.1List 類型使用場(chǎng)景

list 是按照插入順序排序的字符串鏈表??梢栽陬^部和尾部插入新的元素(雙向鏈表實(shí)現(xiàn),兩端添加元素的時(shí)間復(fù)雜度為 O(1)) 。

如何掌握Redis場(chǎng)景設(shè)計(jì)

場(chǎng)景一:消息隊(duì)列實(shí)現(xiàn)

目前有很多專業(yè)的消息隊(duì)列組件 Kafka、RabbitMQ 等。 我們?cè)谶@里僅僅是使用 list 的特征來(lái)實(shí)現(xiàn)消息隊(duì)列的要求。在實(shí)際技術(shù)選型的過(guò)程中,大家可以慎重思考。

list 存儲(chǔ)就是一個(gè)隊(duì)列的存儲(chǔ)形式:

  1. lpush key value; 在 key 對(duì)應(yīng) list 的頭部添加字符串元素;

  2. rpop key;移除列表的最后一個(gè)元素,返回值為移除的元素。

場(chǎng)景二:最新上架商品

在交易網(wǎng)站首頁(yè)經(jīng)常會(huì)有新上架產(chǎn)品推薦的模塊, 這個(gè)模塊是存儲(chǔ)了最新上架前 100 名。

這時(shí)候使用 Redis 的 list 數(shù)據(jù)結(jié)構(gòu),來(lái)進(jìn)行 TOP 100 新上架產(chǎn)品的存儲(chǔ)。

Redis ltrim 指令對(duì)一個(gè)列表進(jìn)行修剪(trim),這樣 list 就會(huì)只包含指定范圍的指定元素。

start 和 stop 都是由 0 開始計(jì)數(shù)的,這里的 0 是列表里的第一個(gè)元素(表頭),1 是第二個(gè)元素。

如下偽代碼演示:

4.1set 類型使用場(chǎng)景

set 也是存儲(chǔ)了一個(gè)集合列表功能。和 list 不同,set 具備去重功能。當(dāng)需要存儲(chǔ)一個(gè)列表信息,同時(shí)要求列表內(nèi)的元素不能有重復(fù),這時(shí)候使用 set 比較合適。與此同時(shí),set 還提供的交集、并集、差集。

例如,在交易網(wǎng)站,我們會(huì)存儲(chǔ)用戶感興趣的商品信息,在進(jìn)行相似用戶分析的時(shí)候, 可以通過(guò)計(jì)算兩個(gè)不同用戶之間感興趣商品的數(shù)量來(lái)提供一些依據(jù)。

獲取到兩個(gè)用戶相似的產(chǎn)品, 然后確定相似產(chǎn)品的類目就可以進(jìn)行用戶分析。

類似的應(yīng)用場(chǎng)景還有, 社交場(chǎng)景下共同關(guān)注好友, 相似興趣 tag 等場(chǎng)景的支持。

如何掌握Redis場(chǎng)景設(shè)計(jì)

4.2Set集合特殊的操作命令

setA={A,B,C} setB={B, C}

1)集合與集合之間的交集

sinter setA setB-->得到集合{B,C}

集合與集合之間的并集

sunion setA setB -->得到集合{A,B,C}

3)集合與集合之間的差集

sdiff setA setB-->得到集合{A}

4.3Set集合特殊的操作命令應(yīng)用場(chǎng)景

如何實(shí)現(xiàn)微博的微關(guān)系設(shè)計(jì)?

如何掌握Redis場(chǎng)景設(shè)計(jì)

5.1 Zset有序集合

常用于排行榜,如視頻網(wǎng)站需要對(duì)用戶上傳視頻做排行榜,或點(diǎn)贊數(shù)與集合有聯(lián)系,不能有重復(fù)的成員

如何掌握Redis場(chǎng)景設(shè)計(jì)

5.2Zset 類型使用場(chǎng)景

如何掌握Redis場(chǎng)景設(shè)計(jì)

感謝各位的閱讀,以上就是“如何掌握Redis場(chǎng)景設(shè)計(jì)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何掌握Redis場(chǎng)景設(shè)計(jì)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI