chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis 五大數(shù)據(jù)類型使用場景有哪些

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 作者:周明堯 ? 2020-11-05 17:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Redis是一種基于鍵值對的NoSQL數(shù)據(jù)庫,它的值主要由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)五種基本數(shù)據(jù)結(jié)構(gòu)構(gòu)成,除此之外還支持一些其他的數(shù)據(jù)結(jié)構(gòu)和算法。key都是由字符串構(gòu)成的,那么這五種數(shù)據(jù)結(jié)構(gòu)的使用場景有哪些?一起來看看!

一 字符串

字符串類型是Redis最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),字符串類型可以是JSON、XML甚至是二進(jìn)制的圖片等數(shù)據(jù),但是最大值不能超過512MB。

1.1 內(nèi)部編碼

Redis會根據(jù)當(dāng)前值的類型和長度決定使用哪種內(nèi)部編碼來實(shí)現(xiàn)。

字符串類型的內(nèi)部編碼有3種:

int:8個(gè)字節(jié)的長整型。

embstr:小于等于39個(gè)字節(jié)的字符串。

raw:大于39個(gè)字節(jié)的字符串。

1.2 使用場景

1.2.1 緩存

在web服務(wù)中,使用MySQL作為數(shù)據(jù)庫,Redis作為緩存。由于Redis具有支撐高并發(fā)的特性,通常能起到加速讀寫和降低后端壓力的作用。web端的大多數(shù)請求都是從Redis中獲取的數(shù)據(jù),如果Redis中沒有需要的數(shù)據(jù),則會從MySQL中去獲取,并將獲取到的數(shù)據(jù)寫入redis。

1.2.2 計(jì)數(shù)

Redis中有一個(gè)字符串相關(guān)的命令incr key,incr命令對值做自增操作,返回結(jié)果分為以下三種情況:

值不是整數(shù),返回錯(cuò)誤

值是整數(shù),返回自增后的結(jié)果

key不存在,默認(rèn)鍵為0,返回1

比如文章的閱讀量,視頻的播放量等等都會使用redis來計(jì)數(shù),每播放一次,對應(yīng)的播放量就會加1,同時(shí)將這些數(shù)據(jù)異步存儲到數(shù)據(jù)庫中達(dá)到持久化的目的。

1.2.3 共享Session

在分布式系統(tǒng)中,用戶的每次請求會訪問到不同的服務(wù)器,這就會導(dǎo)致session不同步的問題,假如一個(gè)用來獲取用戶信息的請求落在A服務(wù)器上,獲取到用戶信息后存入session。下一個(gè)請求落在B服務(wù)器上,想要從session中獲取用戶信息就不能正常獲取了,因?yàn)橛脩粜畔⒌膕ession在服務(wù)器A上,為了解決這個(gè)問題,使用redis集中管理這些session,將session存入redis,使用的時(shí)候直接從redis中獲取就可以了。

1.2.4 限速

為了安全考慮,有些網(wǎng)站會對IP進(jìn)行限制,限制同一IP在一定時(shí)間內(nèi)訪問次數(shù)不能超過n次。

二 哈希

Redis中,哈希類型是指一個(gè)鍵值對的存儲結(jié)構(gòu)。

2.1 內(nèi)部編碼

哈希類型的內(nèi)部編碼有兩種:

ziplist(壓縮列表):當(dāng)哈希類型元素個(gè)數(shù)小于hash-max-ziplist-entries配置(默認(rèn)512個(gè))同時(shí)所有值都小于hash-max-ziplist-value配置(默認(rèn)64字節(jié))時(shí)使用。ziplist使用更加緊湊的結(jié)構(gòu)實(shí)現(xiàn)多個(gè)元素的連續(xù)存儲,所以比hashtable更加節(jié)省內(nèi)存。

hashtable(哈希表):當(dāng)ziplist不能滿足要求時(shí),會使用hashtable。

2.2 使用場景

由于hash類型存儲的是一個(gè)鍵值對,比如數(shù)據(jù)庫有以下一個(gè)用戶表結(jié)構(gòu)

id name age
1 Java旅途 18

將以上信息存入redis,用表明:id作為key,用戶屬性作為值:

hsetuser:1nameJava旅途age18

使用哈希存儲會比字符串更加方便直觀

三 列表

列表類型用來存儲多個(gè)有序的字符串,一個(gè)列表最多可以存儲2^32-1個(gè)元素,列表的兩端都可以插入和彈出元素。

3.1 內(nèi)部編碼

列表的內(nèi)部編碼有兩種:

ziplist(壓縮列表):當(dāng)哈希類型元素個(gè)數(shù)小于list-max-ziplist-entries配置(默認(rèn)512個(gè))同時(shí)所有值都小于list-max-ziplist-value配置(默認(rèn)64字節(jié))時(shí)使用。ziplist使用更加緊湊的結(jié)構(gòu)實(shí)現(xiàn)多個(gè)元素的連續(xù)存儲,所以比hashtable更加節(jié)省內(nèi)存。

linkedlist(鏈表):當(dāng)ziplist不能滿足要求時(shí),會使用linkedlist。

3.2 使用場景

3.2.1 消息隊(duì)列

列表用來存儲多個(gè)有序的字符串,既然是有序的,那么就滿足消息隊(duì)列的特點(diǎn)。使用lpush+rpop或者rpush+lpop實(shí)現(xiàn)消息隊(duì)列。除此之外,redis支持阻塞操作,在彈出元素的時(shí)候使用阻塞命令來實(shí)現(xiàn)阻塞隊(duì)列。

3.2.2 棧

由于列表存儲的是有序字符串,滿足隊(duì)列的特點(diǎn),也就能滿足棧先進(jìn)后出的特點(diǎn),使用lpush+lpop或者rpush+rpop實(shí)現(xiàn)棧。

3.2.3 文章列表

因?yàn)榱斜淼脑夭坏怯行虻?,而且還支持按照索引范圍獲取元素。因此我們可以使用命令lrange key 0 9分頁獲取文章列表

四 集合

集合類型也可以保存多個(gè)字符串元素,與列表不同的是,集合中不允許有重復(fù)元素并且集合中的元素是無序的。一個(gè)集合最多可以存儲2^32-1個(gè)元素。

4.1 內(nèi)部編碼

集合類型的內(nèi)部編碼有兩種:

intset(整數(shù)集合):當(dāng)集合中的元素都是整數(shù)且元素個(gè)數(shù)小于set-max-intset-entries配置(默認(rèn)512個(gè))時(shí),redis會選用intset來作為集合的內(nèi)部實(shí)現(xiàn),從而減少內(nèi)存的使用。

hashtable(哈希表):當(dāng)intset不能滿足要求時(shí),會使用hashtable。

4.2 使用場景

4.2.1 用戶標(biāo)簽

例如一個(gè)用戶對籃球、足球感興趣,另一個(gè)用戶對橄欖球、乒乓球感興趣,這些興趣點(diǎn)就是一個(gè)標(biāo)簽。有了這些數(shù)據(jù)就可以得到喜歡同一個(gè)標(biāo)簽的人,以及用戶的共同感興趣的標(biāo)簽。給用戶打標(biāo)簽的時(shí)候需要①給用戶打標(biāo)簽,②給標(biāo)簽加用戶,需要給這兩個(gè)操作增加事務(wù)。

給用戶打標(biāo)簽

saddusertagstag1tag2

給標(biāo)簽添加用戶

saddtag1:usersuser:1 saddtag2:usersuser:1

使用交集(sinter)求兩個(gè)user的共同標(biāo)簽

sinterusertagsusertags

4.2.2 抽獎(jiǎng)功能

集合有兩個(gè)命令支持獲取隨機(jī)數(shù),分別是:

隨機(jī)獲取count個(gè)元素,集合元素個(gè)數(shù)不變

srandmember key [count]

隨機(jī)彈出count個(gè)元素,元素從集合彈出,集合元素個(gè)數(shù)改變

spop key [count]

用戶點(diǎn)擊抽獎(jiǎng)按鈕,參數(shù)抽獎(jiǎng),將用戶編號放入集合,然后抽獎(jiǎng),分別抽一等獎(jiǎng)、二等獎(jiǎng),如果已經(jīng)抽中一等獎(jiǎng)的用戶不能參數(shù)抽二等獎(jiǎng)則使用spop,反之使用srandmember。

五 有序集合

有序集合和集合一樣,不能有重復(fù)元素。但是可以排序,它給每個(gè)元素設(shè)置一個(gè)score作為排序的依據(jù)。最多可以存儲2^32-1個(gè)元素。

5.1 內(nèi)部編碼

有序集合類型的內(nèi)部編碼有兩種:

ziplist(壓縮列表):當(dāng)有序集合的元素個(gè)數(shù)小于list-max-ziplist-entries配置(默認(rèn)128個(gè))同時(shí)所有值都小于list-max-ziplist-value配置(默認(rèn)64字節(jié))時(shí)使用。ziplist使用更加緊湊的結(jié)構(gòu)實(shí)現(xiàn)多個(gè)元素的連續(xù)存儲,更加節(jié)省內(nèi)存。

skiplist(跳躍表):當(dāng)不滿足ziplist的要求時(shí),會使用skiplist。

5.2 使用場景

5.2.1 排行榜

用戶發(fā)布了n篇文章,其他人看到文章后給喜歡的文章點(diǎn)贊,使用score來記錄點(diǎn)贊數(shù),有序集合會根據(jù)score排行。流程如下

用戶發(fā)布一篇文章,初始點(diǎn)贊數(shù)為0,即score為0

zadduser:article0a

有人給文章a點(diǎn)贊,遞增1

zincrbyuser:article1a

查詢點(diǎn)贊前三篇文章

zrevrangebyscoreuser:article02

查詢點(diǎn)贊后三篇文章

zrangebyscoreuser:article02

5.2.2 延遲消息隊(duì)列

下單系統(tǒng),下單后需要在15分鐘內(nèi)進(jìn)行支付,如果15分鐘未支付則自動取消訂單。將下單后的十五分鐘后時(shí)間作為score,訂單作為value存入redis,消費(fèi)者輪詢?nèi)ハM(fèi),如果消費(fèi)的大于等于這筆記錄的score,則將這筆記錄移除隊(duì)列,取消訂單。

總結(jié)

在開發(fā)中,字符串類型是用的最多的數(shù)據(jù)類型,導(dǎo)致我們忽視了redis的其他四種數(shù)據(jù)類型,在具體場景下選擇具體的數(shù)據(jù)類型對提升redis性能有非常大的幫助。redis雖然支持消息隊(duì)列的實(shí)現(xiàn),但是并不支持ack。所以redis實(shí)現(xiàn)的消息隊(duì)列不能保證消息的可靠性,除非自己實(shí)現(xiàn)消息確認(rèn)機(jī)制,不過這非常麻煩,所以如果是重要的消息還是推薦使用專門的消息隊(duì)列去做。

責(zé)任編輯:xj

原文標(biāo)題:Redis 五大數(shù)據(jù)類型使用場景

文章出處:【微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7292

    瀏覽量

    93361
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2992

    瀏覽量

    114744
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    390

    瀏覽量

    11853

原文標(biāo)題:Redis 五大數(shù)據(jù)類型使用場景

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    五大電磁頻譜管理監(jiān)測系統(tǒng)軟件:哪些優(yōu)點(diǎn)和缺點(diǎn)

    五大電磁頻譜管理監(jiān)測系統(tǒng)軟件:哪些優(yōu)點(diǎn)和缺點(diǎn)
    的頭像 發(fā)表于 09-28 16:50 ?384次閱讀
    <b class='flag-5'>五大</b>電磁頻譜管理監(jiān)測系統(tǒng)軟件:<b class='flag-5'>有</b>哪些優(yōu)點(diǎn)和缺點(diǎn)

    如何選擇適合特定應(yīng)用場景的電能質(zhì)量在線監(jiān)測裝置?

    選擇適合特定應(yīng)用場景的電能質(zhì)量在線監(jiān)測裝置,核心邏輯是 “ 場景需求拆解→技術(shù)參數(shù)匹配→功能適配驗(yàn)證→全生命周期評估 ”,需圍繞場景的 電壓等級、監(jiān)測重點(diǎn)、環(huán)境條件、數(shù)據(jù)需求、合規(guī)要求
    的頭像 發(fā)表于 09-26 16:15 ?423次閱讀

    五大海上安全事件應(yīng)急處置系統(tǒng):哪些優(yōu)點(diǎn)和缺點(diǎn)

    五大海上安全事件應(yīng)急處置系統(tǒng):哪些優(yōu)點(diǎn)和缺點(diǎn)
    的頭像 發(fā)表于 09-04 17:09 ?535次閱讀
    <b class='flag-5'>五大</b>海上安全事件應(yīng)急處置系統(tǒng):<b class='flag-5'>有</b>哪些優(yōu)點(diǎn)和缺點(diǎn)

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫表中的每個(gè)列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?463次閱讀

    騰龍MP3010M-EV在智能工廠的五大核心應(yīng)用場景解析

    領(lǐng)域的重要解決方案。本文將圍繞其在智能工廠的五大核心應(yīng)用場景展開,解析其如何解決傳統(tǒng)視覺系統(tǒng)的痛點(diǎn)。 一、生產(chǎn)線質(zhì)量檢測:從宏觀到微觀的全覆蓋 1.1 傳統(tǒng)檢測的局限性 傳統(tǒng)定焦相機(jī)在質(zhì)量檢測中常面臨兩難:廣角鏡頭覆蓋范圍廣但細(xì)節(jié)丟
    的頭像 發(fā)表于 07-24 09:15 ?175次閱讀

    電商API的五大應(yīng)用場景:解鎖增長新機(jī)遇

    新的商業(yè)機(jī)會。本文將深入探討電商API的五大應(yīng)用場景,展示它們?nèi)绾谓怄i增長新機(jī)遇。每個(gè)場景均結(jié)合實(shí)際案例和關(guān)鍵指標(biāo),確保內(nèi)容實(shí)用且可操作。 1. 支付集成:確保安全高效的交易處理 支付API是電商平臺
    發(fā)表于 06-24 14:29

    IEC101協(xié)議可以傳輸什么類型數(shù)據(jù)

    IEC101協(xié)議作為電力系統(tǒng)遠(yuǎn)動通信的核心標(biāo)準(zhǔn),其核心能力在于支持多種類型數(shù)據(jù)的傳輸,滿足調(diào)度端與場站端(如變電站、發(fā)電廠)的實(shí)時(shí)監(jiān)控、控制及狀態(tài)感知需求。以下從數(shù)據(jù)類型、傳輸模式及典型應(yīng)用場
    的頭像 發(fā)表于 05-21 11:37 ?544次閱讀

    labview數(shù)據(jù)類型與PLC 數(shù)據(jù)類型之間的轉(zhuǎn)換(來自于寫入浮點(diǎn)數(shù)到匯川 PLC中的數(shù)據(jù)轉(zhuǎn)換關(guān)鍵的修改)

    單、雙精度浮點(diǎn)數(shù)強(qiáng)制轉(zhuǎn)換成U32,結(jié)果是不一樣的。所以labview在強(qiáng)制轉(zhuǎn)換前,必須將數(shù)據(jù)類型設(shè)置為單精度浮點(diǎn)數(shù),就可以了 概述1:PLC中比較復(fù)雜的數(shù)據(jù)類型DINT、REAL分別對應(yīng)32為
    發(fā)表于 02-24 19:01

    數(shù)據(jù)記錄儀的計(jì)數(shù)原理和應(yīng)用場景

    數(shù)據(jù)記錄儀是一種用于測量、記錄和分析各種數(shù)據(jù)的設(shè)備,其計(jì)數(shù)原理和應(yīng)用場景可以歸納如下: 一、計(jì)數(shù)原理數(shù)據(jù)記錄儀的計(jì)數(shù)原理主要基于傳感器技術(shù)、信號處理技術(shù)以及
    發(fā)表于 02-24 14:28

    不同類型的馬達(dá)的應(yīng)用場景

    馬達(dá)的種類繁多,每種類型都有其特定的適用場景 ?。 ? 一、電動馬達(dá) ? ? 交流電動機(jī) ? ? 感應(yīng)電動機(jī) ?:適用于空調(diào)、洗衣機(jī)、風(fēng)扇等家用電器,以及電車、電梯等交通工具?1。 ? 同步電動機(jī)
    的頭像 發(fā)表于 02-24 11:21 ?1663次閱讀

    站群服務(wù)器與VPS的適用場景什么不同嗎

    站群服務(wù)器與VPS虛擬專用服務(wù)器在適用場景上確實(shí)存在顯著的差異。以下是兩者適用場景的具體對比,主機(jī)推薦小編為您整理發(fā)布群服務(wù)器與VPS的適用場景什么不同嗎。
    的頭像 發(fā)表于 02-05 10:08 ?565次閱讀

    數(shù)據(jù)網(wǎng)絡(luò)分析儀的原理和應(yīng)用場景

    數(shù)據(jù)網(wǎng)絡(luò)分析儀的原理和應(yīng)用場景可以分別闡述如下:一、數(shù)據(jù)網(wǎng)絡(luò)分析儀的原理數(shù)據(jù)網(wǎng)絡(luò)分析儀的原理主要涉及以下幾個(gè)方面: 數(shù)據(jù)捕獲:網(wǎng)絡(luò)分析儀通過
    發(fā)表于 01-16 14:57

    系統(tǒng)放大器的技術(shù)原理和應(yīng)用場景

    系統(tǒng)放大器是一種重要的電子設(shè)備,其技術(shù)原理和應(yīng)用場景都具有一定的專業(yè)性和廣泛性。以下是對系統(tǒng)放大器的技術(shù)原理和應(yīng)用場景的詳細(xì)介紹:一、技術(shù)原理系統(tǒng)放大器的工作原理基于電子器件的非線性特性,通過控制
    發(fā)表于 11-18 14:46

    SD NAND在大數(shù)據(jù)時(shí)代的應(yīng)用場景

    和相對較低的成本,可以用于多種場景數(shù)據(jù)采集 :在大數(shù)據(jù)領(lǐng)域,大量的數(shù)據(jù)需要被采集和存儲。SD NAND卡可以用于各種數(shù)據(jù)采集設(shè)備,如物聯(lián)
    的頭像 發(fā)表于 10-29 15:49 ?850次閱讀
    SD NAND在<b class='flag-5'>大數(shù)據(jù)</b>時(shí)代的應(yīng)<b class='flag-5'>用場景</b>

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收?int還是unsigned int?

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收,int還是unsigned int? 這個(gè)采集到的數(shù)字是什么含義呢?代表的是聲音信號的幅值? while(!MCBSP_rrdy(hMcbsp
    發(fā)表于 10-18 06:56