Redis受人歡迎的使用場景

本文主要說明Redis的常用場景。其實(shí)知道Redis是什么是很重要,如果你的場景其實(shí)就是一個(gè)工作流,而你還是以Redis是緩存的角度去看待,明顯會(huì)出問題。希望閱讀完本文后,你能突破現(xiàn)有的業(yè)務(wù)局限,嘗試探索新的領(lǐng)域。
在此簡單介紹下

Redis介紹

Redis是基于內(nèi)存的NoSQL數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),經(jīng)常用作數(shù)據(jù)庫、緩存和消息中間件。和同樣基于內(nèi)存的組件,如Memcached不同,它能將數(shù)據(jù)持久化到硬盤,也提供一定的錯(cuò)誤恢復(fù),它還有豐富易操作的數(shù)據(jù)結(jié)構(gòu)。它具有優(yōu)秀的性能,能低延遲處理大規(guī)模的數(shù)據(jù),也足夠簡單。
我們知道,大部分NoSQL數(shù)據(jù)庫并不需要定義好的SQL模式Schema,而是使用文檔、KV或圖等存儲(chǔ)格式。而Redis與眾不同的一點(diǎn)是它有不同的數(shù)據(jù)結(jié)構(gòu)供你使用,如最常用的String/Hash/List/Set等等。如果你曾用過Memcached,這類只能以字符串存儲(chǔ)的產(chǎn)品,應(yīng)該對Redis這點(diǎn)更喜歡。這些數(shù)據(jù)結(jié)構(gòu)是高度可配置的,增加很少的代碼就能實(shí)現(xiàn)更復(fù)雜的(數(shù)據(jù)結(jié)構(gòu))功能。

常用場景

首先對常用場景做個(gè)概括:

  1. 統(tǒng)計(jì)數(shù)據(jù)和交互數(shù)據(jù)的緩存
  2. 用戶會(huì)話數(shù)據(jù)管理
  3. 計(jì)數(shù)、排名等實(shí)時(shí)分析
  4. 商品/文章推薦
  5. 工作流的消息隊(duì)列

緩存

緩存是Redis最知名的用法,也是入門都會(huì)遇到的典型案例。構(gòu)建一個(gè)高性能可擴(kuò)展的系統(tǒng)幾乎都會(huì)涉及緩存,就和硬盤和內(nèi)存一樣,Redis保存部分核心存儲(chǔ)的副本,以應(yīng)對最頻繁的訪問,把壓力轉(zhuǎn)移避免核心存儲(chǔ)造成性能瓶頸。具體說:

  • 緩存靜態(tài)頁面等頁面內(nèi)容,這樣能減少后端Web服務(wù)器壓力;
  • 緩存諸如排名,熱點(diǎn)文章等更新慢讀取頻繁的內(nèi)容;
  • 緩存用戶會(huì)話信息,能提供給各應(yīng)用,SOA和微服務(wù)共享;
  • 緩存API調(diào)用結(jié)果或頻繁且慢的SQL結(jié)果;


    Redis緩存示意

用戶會(huì)話數(shù)據(jù)管理

大型網(wǎng)站每天有億萬的用戶訪問, 這些訪問的用戶信息和如PV,商品,點(diǎn)擊,加載時(shí)間和跳轉(zhuǎn)時(shí)間等等訪問信息都需要第一時(shí)間存儲(chǔ)下來,存儲(chǔ)到多個(gè)session里,然后后臺(tái)的各個(gè)應(yīng)用需要使用它,還可能要提供很多即時(shí)的用戶交互。之前人們會(huì)直接在Tomcat等服務(wù)器上直接維護(hù)Session,但這樣必須要考慮負(fù)載均衡的問題,要避免復(fù)雜的業(yè)務(wù)導(dǎo)致服務(wù)器宕機(jī)。而最重要的是session只能那臺(tái)服務(wù)器使用,無法共享也存在丟失無法恢復(fù)的風(fēng)險(xiǎn)?,F(xiàn)在需要一個(gè)能供所有后臺(tái)應(yīng)用或移動(dòng)應(yīng)用訪問并且高可用高吞吐低延遲的數(shù)據(jù)存儲(chǔ)。
Redis無疑都能做到,Hash的存儲(chǔ)方式無疑適合用戶ID用戶名等數(shù)據(jù),各種靈活的數(shù)據(jù)結(jié)構(gòu)能把不同的數(shù)據(jù)分門別類地存儲(chǔ)好,比如把一次會(huì)話的不同操作放入一個(gè)List里,訪問和更新都很簡單。也可以設(shè)置數(shù)據(jù)生存時(shí)間,既能控制會(huì)話超時(shí)也節(jié)省資源。


Redis用戶會(huì)話示例

實(shí)時(shí)分析

Redis在實(shí)時(shí)分析計(jì)算方面也是異常好用,就如比賽中的裁判和計(jì)分員。以最常見的TopN計(jì)算為例,可以直接使用Redis的數(shù)據(jù)結(jié)構(gòu)Sorted Sets 自動(dòng)保存評(píng)論及進(jìn)行點(diǎn)贊排序,當(dāng)然它能支持更大的數(shù)據(jù)和更實(shí)時(shí)的場景。


Redis模擬計(jì)分的存儲(chǔ)結(jié)構(gòu)

用戶推薦

現(xiàn)在做的智能零售也在嘗試應(yīng)用這個(gè)場景,在互聯(lián)網(wǎng)零售和電商已經(jīng)比較普及。簡單的推薦就是有個(gè)平時(shí)和我購物習(xí)慣類似的人也買了,和我訪問類似的人也訪問了。利用Redis可以很容易地找出這些商品或文章。數(shù)據(jù)類型Set就是答案,在很多存儲(chǔ)方案里,關(guān)聯(lián)和交集是很耗資源很慢的操作,而在Redis里使用sadd + sinter操作就能從一堆set中找到它們的交集。還可以用sismember指定必需的標(biāo)簽或商品,或用smemers或sscan擴(kuò)展交集,提供出“相似還**”的功能效果


Redis用于用戶推薦存儲(chǔ)結(jié)構(gòu)

工作流的消息隊(duì)列

使用Redis作為消息隊(duì)列是很常見的用法。許多涉及工作流、工作環(huán)的系統(tǒng)都會(huì)使用到Redis,使用它的List類型。 比如一個(gè)交易訂單可以放入隊(duì)列由人工審核或算法自動(dòng)審核,超時(shí)時(shí)自動(dòng)出列,后續(xù)轉(zhuǎn)入發(fā)送交易成功或失敗的隊(duì)列。還可以同時(shí)做遠(yuǎn)程監(jiān)控。在Redis中List是有序的字符串集合,lpush可以從左邊加入一個(gè)字符串,作為棧的開始。 And RPUSH will add the value to the ‘right’ end
of the list, usually referred to as the end or bottom of the List. RPOP will remove the last element of the list, while LPOP will
remove the first element. RPOPLPUSH, as fun as it sounds, is an efficient way to ‘pop’ an element from the right end of one
List and ‘push’ it to the left end of another List.


Redis用于工作流管理

參考翻譯Redis白皮書《Popular Redis Uses for Beginners》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,312評(píng)論 2 89
  • 1、什么是Redis? Redis本質(zhì)上是一個(gè)Key-Value類型的內(nèi)存數(shù)據(jù)庫,很像memcached,整個(gè)數(shù)據(jù)...
    夜風(fēng)月圓閱讀 2,266評(píng)論 0 23
  • 我是一位不知名公司里的小職員,出生在上世紀(jì)90年代。我居住在一個(gè)不算偏遠(yuǎn)但也算不上繁華的小城市里。擁有一份不至于討...
    大力穩(wěn)重閱讀 644評(píng)論 11 37
  • 隨著社會(huì)活動(dòng)功利性的加劇,一切活動(dòng)以“效率”為前提,讀書也變成了一件功利的活動(dòng)。古人有“書讀百遍,其義自見”,追求...
    番薯是紅薯閱讀 406評(píng)論 0 0
  • 一時(shí)書 智庫捐款一元 白血病患者捐款兩元 二時(shí)書 友善的語言,溝通移動(dòng)公司客服。對話費(fèi)充值未到賬進(jìn)行溝通。 三時(shí)書...
    我不叫許仲斌閱讀 166評(píng)論 0 0

友情鏈接更多精彩內(nèi)容