天天看點

Redis緩存技術及應用場景案例

Remote Dictionary Server(Redis) 是一個開源的由Salvatore Sanfilippo使用ANSI C語言開發的key-value資料存儲伺服器。其值(value)可以是 字元串(String), 哈希(Map), 清單(list), 集合(sets) 和 有序集合(sorted sets)等類型,是以它通常也被稱為資料結構伺服器。
           

blob.png

Redis特點

redis足夠簡單和穩定

支援豐富的資料結構

記憶體存儲讀寫性能優秀

提供持久化的支援

支援事務操作

提供主從複制功能

Redis與memcache性能壓力測試比較

Redis的典型應用場景:

一:緩存熱點資料

熱點資料(經常會被查詢,但是不經常被修改或者删除的資料),首選是使用redis緩存,redis的性能非常優秀。

二:計數器

諸如統計點選數、通路數、點贊數、評論數、浏覽數等應用,由于單線程,可以避免并發問題,保證資料的正确性,并且100%毫秒級性能,同時開啟Redis持久化,以便于持久化資料。

三:單線程機制

驗證前端的重複請求,可以自由擴充類似情況),可以通過redis進行過濾,比如,每次請求将Request IP、參數、接口等hash作為key存儲redis(幂等性請求),設定多長時間有效期,然後下次請求過來的時候先在redis中檢索有沒有這個key,進而驗證是不是一定時間内過來的重複送出;再比如,限制使用者登入的次數,比如一天錯誤登入次數10次等。

秒殺系統,基于redis是單線程特征,防止出現資料庫超賣;

全局增量ID生成等;

四:排行榜

誰得分高誰排名在前,比如點選率最高、活躍度最高、銷售數量最高、投票最高的前10名排行等等;

五:分布式鎖

使用redis可以實作分布式鎖,為了確定分布式鎖可用,我們至少要確定鎖的實作同時滿足以下四個條件:

互斥性,在任意時刻,隻有一個用戶端能持有鎖。

不會發生死鎖,即使有一個用戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證後續其他用戶端能加鎖。

具有容錯性,隻要大部分的Redis節點正常運作,用戶端就可以加鎖和解鎖。

解鈴還須系鈴人,加鎖和解鎖必須是同一個用戶端,用戶端不能解他人加的鎖。

六:Session存儲

使用Redis的進行會話緩存(session cache)是非常常見的一種場景。用Redis緩存會話比其他存儲(如Memcached)的優勢在于:Redis提供持久化,目前大量的方案均采用了redis作為session的存儲方案。