国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Redis 五大數據類型使用場景有哪些

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

掃碼添加小助手

加入工程師交流群

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

一 字符串

字符串類型是Redis最基礎的數據結構,字符串類型可以是JSON、XML甚至是二進制的圖片等數據,但是最大值不能超過512MB。

1.1 內部編碼

Redis會根據當前值的類型和長度決定使用哪種內部編碼來實現。

字符串類型的內部編碼有3種:

int:8個字節的長整型。

embstr:小于等于39個字節的字符串。

raw:大于39個字節的字符串。

1.2 使用場景

1.2.1 緩存

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

1.2.2 計數

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

值不是整數,返回錯誤

值是整數,返回自增后的結果

key不存在,默認鍵為0,返回1

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

1.2.3 共享Session

在分布式系統中,用戶的每次請求會訪問到不同的服務器,這就會導致session不同步的問題,假如一個用來獲取用戶信息的請求落在A服務器上,獲取到用戶信息后存入session。下一個請求落在B服務器上,想要從session中獲取用戶信息就不能正常獲取了,因為用戶信息的session在服務器A上,為了解決這個問題,使用redis集中管理這些session,將session存入redis,使用的時候直接從redis中獲取就可以了。

1.2.4 限速

為了安全考慮,有些網站會對IP進行限制,限制同一IP在一定時間內訪問次數不能超過n次。

二 哈希

Redis中,哈希類型是指一個鍵值對的存儲結構。

2.1 內部編碼

哈希類型的內部編碼有兩種:

ziplist(壓縮列表):當哈希類型元素個數小于hash-max-ziplist-entries配置(默認512個)同時所有值都小于hash-max-ziplist-value配置(默認64字節)時使用。ziplist使用更加緊湊的結構實現多個元素的連續存儲,所以比hashtable更加節省內存。

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

2.2 使用場景

由于hash類型存儲的是一個鍵值對,比如數據庫有以下一個用戶表結構

id name age
1 Java旅途 18

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

hsetuser:1nameJava旅途age18

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

三 列表

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

3.1 內部編碼

列表的內部編碼有兩種:

ziplist(壓縮列表):當哈希類型元素個數小于list-max-ziplist-entries配置(默認512個)同時所有值都小于list-max-ziplist-value配置(默認64字節)時使用。ziplist使用更加緊湊的結構實現多個元素的連續存儲,所以比hashtable更加節省內存。

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

3.2 使用場景

3.2.1 消息隊列

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

3.2.2 棧

由于列表存儲的是有序字符串,滿足隊列的特點,也就能滿足棧先進后出的特點,使用lpush+lpop或者rpush+rpop實現棧。

3.2.3 文章列表

因為列表的元素不但是有序的,而且還支持按照索引范圍獲取元素。因此我們可以使用命令lrange key 0 9分頁獲取文章列表

四 集合

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

4.1 內部編碼

集合類型的內部編碼有兩種:

intset(整數集合):當集合中的元素都是整數且元素個數小于set-max-intset-entries配置(默認512個)時,redis會選用intset來作為集合的內部實現,從而減少內存的使用。

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

4.2 使用場景

4.2.1 用戶標簽

例如一個用戶對籃球、足球感興趣,另一個用戶對橄欖球、乒乓球感興趣,這些興趣點就是一個標簽。有了這些數據就可以得到喜歡同一個標簽的人,以及用戶的共同感興趣的標簽。給用戶打標簽的時候需要①給用戶打標簽,②給標簽加用戶,需要給這兩個操作增加事務。

給用戶打標簽

saddusertagstag1tag2

給標簽添加用戶

saddtag1:usersuser:1 saddtag2:usersuser:1

使用交集(sinter)求兩個user的共同標簽

sinterusertagsusertags

4.2.2 抽獎功能

集合有兩個命令支持獲取隨機數,分別是:

隨機獲取count個元素,集合元素個數不變

srandmember key [count]

隨機彈出count個元素,元素從集合彈出,集合元素個數改變

spop key [count]

用戶點擊抽獎按鈕,參數抽獎,將用戶編號放入集合,然后抽獎,分別抽一等獎、二等獎,如果已經抽中一等獎的用戶不能參數抽二等獎則使用spop,反之使用srandmember。

五 有序集合

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

5.1 內部編碼

有序集合類型的內部編碼有兩種:

ziplist(壓縮列表):當有序集合的元素個數小于list-max-ziplist-entries配置(默認128個)同時所有值都小于list-max-ziplist-value配置(默認64字節)時使用。ziplist使用更加緊湊的結構實現多個元素的連續存儲,更加節省內存。

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

5.2 使用場景

5.2.1 排行榜

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

用戶發布一篇文章,初始點贊數為0,即score為0

zadduser:article0a

有人給文章a點贊,遞增1

zincrbyuser:article1a

查詢點贊前三篇文章

zrevrangebyscoreuser:article02

查詢點贊后三篇文章

zrangebyscoreuser:article02

5.2.2 延遲消息隊列

下單系統,下單后需要在15分鐘內進行支付,如果15分鐘未支付則自動取消訂單。將下單后的十五分鐘后時間作為score,訂單作為value存入redis,消費者輪詢去消費,如果消費的大于等于這筆記錄的score,則將這筆記錄移除隊列,取消訂單。

總結

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

責任編輯:xj

原文標題:Redis 五大數據類型使用場景

文章出處:【微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94755
  • JAVA
    +關注

    關注

    20

    文章

    3001

    瀏覽量

    116422
  • Redis
    +關注

    關注

    0

    文章

    392

    瀏覽量

    12185

原文標題:Redis 五大數據類型使用場景

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    EtherCAT FOE常見五大用場景:固件更新、遠程診斷都能干!

    EtherCATFOE不只是文件傳輸工具,更是工業設備維護的“多面手”。本文詳解五大高頻應用場景,看看它如何簡化你的設備管理。技術背景:為什么需要FOE?工業現場設備成千上萬,維護工作令人頭疼:固件
    的頭像 發表于 02-28 11:40 ?94次閱讀
    EtherCAT FOE常見<b class='flag-5'>五大</b>應<b class='flag-5'>用場景</b>:固件更新、遠程診斷都能干!

    睿遠研究院丨IO-Link規范解讀(十五):數據類型詳解

    前言 本篇對IO-Link規范的附錄F的數據類型做個詳細解釋,附錄定義了 ?基本數據類型 (Basic Data Types) 和? 組合數據類型 (Composite Data Types),并
    的頭像 發表于 01-14 18:25 ?5298次閱讀
    睿遠研究院丨IO-Link規范解讀(十五):<b class='flag-5'>數據類型</b>詳解

    Switch的應用場景

    Switch的應用場景如下: 調用一到多個函數 設置變量值或者返回一個值 執行一到多個代碼片段 如果case標簽很多,在switch的前兩個使用場景中,使用查找表可以更高效的完成。例如下面的兩種
    發表于 12-12 07:28

    動態調整策略的應用場景哪些?

    場景類型 + 核心痛點 + 調整邏輯 + 價值” 的詳細拆解,結合實際應用場景說明: 一、工業用戶場景(負載波動劇烈,事件頻發) 典型場景
    的頭像 發表于 12-11 17:30 ?1365次閱讀

    藍牙網關是什么?都有哪些功能?應用場景哪些?

    點,更構建起“設備互聯-數據流轉-智能管控”的完整鏈路,成為物聯網生態中不可或缺的核心組件。本文將系統解析藍牙網關的核心價值、技術架構、應用場景、現存挑戰及未來趨勢,為讀者呈現這一關鍵技術的全貌
    發表于 12-11 15:21

    CW32L083哪些應用場景

    CW32L083哪些應用場景
    發表于 11-24 07:37

    請問CW32L011哪些應用場景

    請問CW32L011哪些應用場景
    發表于 11-17 06:25

    CW32L0系列都有哪些應用場景哪些優勢?

    目前芯源的低功耗MCU比較火爆,就是CW32L0系列都有哪些應用場景哪些優勢?
    發表于 11-14 06:03

    五大電磁頻譜管理監測系統軟件:哪些優點和缺點

    五大電磁頻譜管理監測系統軟件:哪些優點和缺點
    的頭像 發表于 09-28 16:50 ?818次閱讀
    <b class='flag-5'>五大</b>電磁頻譜管理監測系統軟件:<b class='flag-5'>有</b>哪些優點和缺點

    如何選擇適合特定應用場景的電能質量在線監測裝置?

    選擇適合特定應用場景的電能質量在線監測裝置,核心邏輯是 “ 場景需求拆解→技術參數匹配→功能適配驗證→全生命周期評估 ”,需圍繞場景的 電壓等級、監測重點、環境條件、數據需求、合規要求
    的頭像 發表于 09-26 16:15 ?981次閱讀

    五大海上安全事件應急處置系統:哪些優點和缺點

    五大海上安全事件應急處置系統:哪些優點和缺點
    的頭像 發表于 09-04 17:09 ?991次閱讀
    <b class='flag-5'>五大</b>海上安全事件應急處置系統:<b class='flag-5'>有</b>哪些優點和缺點

    SQL 通用數據類型

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

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

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

    電商API的五大用場景:解鎖增長新機遇

    新的商業機會。本文將深入探討電商API的五大用場景,展示它們如何解鎖增長新機遇。每個場景均結合實際案例和關鍵指標,確保內容實用且可操作。 1. 支付集成:確保安全高效的交易處理 支付API是電商平臺
    發表于 06-24 14:29

    IEC101協議可以傳輸什么類型數據

    IEC101協議作為電力系統遠動通信的核心標準,其核心能力在于支持多種類型數據的傳輸,滿足調度端與場站端(如變電站、發電廠)的實時監控、控制及狀態感知需求。以下從數據類型、傳輸模式及典型應用場
    的頭像 發表于 05-21 11:37 ?1001次閱讀