" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis集群的三種部署方式及三種應(yīng)用問題的處理

 更新時間:2024年04月23日 08:54:56   作者:云淡風(fēng)qin  
這篇文章主要介紹了Redis集群的三種部署方式及三種應(yīng)用問題的處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Redis集群部署三種方式

1. 主從復(fù)制

主機數(shù)據(jù)更新后根據(jù)配置和策略, 自動同步到備機的 master/slaver 機制,Master 以寫為主,Slaver 以讀為主。

主從復(fù)制

優(yōu)點:

  • 讀寫分離,性能擴展
  • 容災(zāi)快速恢復(fù)
  • 一主多從!

缺點:

  • 單主單從的情況下,讀寫分離很好,但是如果萬一主掛了,這樣就無法寫了
  • 或者單主多從時,如果主掛了,也無法進(jìn)行同步了。這樣就需要選舉出一個新的主來作為主機。

2. 哨兵模式

使用Sentinel,能夠后臺監(jiān)控主機是否故障,如果故障了根據(jù)投票數(shù)自動將從庫轉(zhuǎn)換為主庫。

哨兵模式

優(yōu)點:

  • 監(jiān)控
  • 監(jiān)控服務(wù)器節(jié)點
  • 提醒
  • 當(dāng)監(jiān)控的節(jié)點出現(xiàn)問題時,可以通過api通知其他應(yīng)用等
  • 故障轉(zhuǎn)移
  • 當(dāng)主掛掉時會選舉新的從服務(wù)器為主服務(wù)器,代替原來主服務(wù)器的地位

3. redis-cluster模式

1.無中心化集群配置( redis3.0

2.集群由多個節(jié)點(Node) 組成,Redis 的數(shù)據(jù)分布在這些節(jié)點中。

3.集群中的節(jié)點分為主節(jié)點和從節(jié)點;只有主節(jié)點負(fù)責(zé)讀寫請求和集群信息的維護(hù);從節(jié)點只進(jìn)行主節(jié)點數(shù)據(jù)和狀態(tài)信息的復(fù)制。

redis-cluster模式

優(yōu)點:

  • 實現(xiàn)擴容;
  • 分?jǐn)倝毫Γ?/li>
  • 無中心配置相對簡單。

缺點:

  • 多鍵操作是不被支持的;
  • 多鍵的 Redis 事務(wù)是不被支持的。lua 腳本不被支持;
  • 由于集群方案出現(xiàn)較晚,很多公司已經(jīng)采用了其他的集群方案,而代理或者客戶端分片的方案想要遷移至redis cluster,需要整體遷移而不是逐步過渡,復(fù)雜度較大。

Redis應(yīng)用的三種問題,穿透、擊穿、雪崩

緩存穿透

key 對應(yīng)的數(shù)據(jù)在數(shù)據(jù)源并不存在,每次針對此 key 的請求從緩存獲取不到,請求都會壓到數(shù)據(jù)源,從而可能壓垮數(shù)據(jù)源。

比如用一個不存在的用戶 id 獲取用戶信息,不論緩存還是數(shù)據(jù)庫都沒有,若黑客利用此漏洞進(jìn)行攻擊可能壓垮數(shù)據(jù)庫。

造成:

  • 應(yīng)用服務(wù)器壓力變大。
  • redis 命中率下降 ? \longrightarrow ? 查詢數(shù)據(jù)庫 。

解決:

對空值緩存

  • 如果一個查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)是否不存在),仍然把這個空結(jié)果(null)進(jìn)行緩存,設(shè)置空結(jié)果的過期時間會很短,最長不超過五分鐘。

設(shè)置可訪問的名單(白名單):

  • 使用 bitmaps 類型定義一個可以訪問的名單,名單 id 作為 bitmaps 的偏移量,每次訪問和 bitmap 里面的 id 進(jìn)行比較,如果訪問 id 不在 bitmaps 里面,進(jìn)行攔截,則不允許訪問。

采用布隆過濾器

  • 布隆過濾器(Bloom Filter)是1970年由布隆提出的。它實際上是一個很長的二進(jìn)制向量(位圖)和一系列隨機映射函數(shù)(哈希函數(shù))。
  • 布隆過濾器可以用于檢索一個元素是否在一個集合中。它的優(yōu)點是空間效率和查詢時間都遠(yuǎn)遠(yuǎn)超過一般的算法,缺點是有一定的誤識別率和刪除困難。
  • 將所有可能存在的數(shù)據(jù)哈希到一個足夠大的 bitmaps 中,一個一定不存在的數(shù)據(jù)會被這個 bitmaps 攔截掉,從而避免了對底層存儲系統(tǒng)的查詢壓力。

進(jìn)行實時監(jiān)控

  • 當(dāng)發(fā)現(xiàn) Redis 的命中率開始急速降低,需要排查訪問對象和訪問的數(shù)據(jù),和運維人員配合,可以設(shè)置黑名單限制服務(wù)。

緩存擊穿

key 對應(yīng)的數(shù)據(jù)存在,但在 redis 中過期,此時若有大量并發(fā)請求過來,這些請求發(fā)現(xiàn)緩存過期一般都會從后端DB 加載數(shù)據(jù)并回設(shè)到緩存,這個時候大并發(fā)的請求可能會瞬間把后端 DB 壓垮。

如何解決

  • 預(yù)先設(shè)置熱門數(shù)據(jù)
  • redis 高峰訪問之前,把一些熱門數(shù)據(jù)提前存入到 redis 里面,加大這些熱門數(shù)據(jù) key 的時長。
  • 實時調(diào)整
  • 現(xiàn)場監(jiān)控哪些數(shù)據(jù)熱門,實時調(diào)整 key 的過期時長。
  • 使用鎖

緩存雪崩

緩存雪崩是指在我們設(shè)置緩存時采用了相同的過期時間,導(dǎo)致緩存在某一時刻同時失效,請求全部轉(zhuǎn)發(fā)到DB,DB瞬時壓力過重雪崩。 

解決

構(gòu)建多級緩存架構(gòu) 

  • nginx 緩存 + redis 緩存 + 其他緩存(ehcache等)

使用鎖或隊列:

  • 用加鎖或者隊列的方式保證來保證不會有大量的線程對數(shù)據(jù)庫一次性進(jìn)行讀寫,從而避免失效時大量的并發(fā)請求落到底層存儲系統(tǒng)上。不適用高并發(fā)情況。

設(shè)置過期標(biāo)志更新緩存:

  • 記錄緩存數(shù)據(jù)是否過期(設(shè)置提前量),如果過期會觸發(fā)通知另外的線程在后臺去更新實際 key 的緩存。

將緩存失效時間分散開:

  • 比如我們可以在原有的失效時間基礎(chǔ)上增加一個隨機值,比如 1~5 分鐘隨機,這樣每一個緩存的過期時間的重復(fù)率就會降低,就很難引發(fā)集體失效的事件。

總結(jié)

  • 穿透:緩存不存在,數(shù)據(jù)庫不存在,高并發(fā),少量key
  • 擊穿:緩存不存在,數(shù)據(jù)庫存在,高并發(fā),少量key
  • 雪崩:緩存不存在,數(shù)據(jù)庫存在,高并發(fā),大量key

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析Redis中String數(shù)據(jù)類型及其底層編碼

    淺析Redis中String數(shù)據(jù)類型及其底層編碼

    這篇文章主要介紹?Redis?中?String?數(shù)據(jù)類型及其底層編碼,文中有詳細(xì)的代碼示例,對大家的工作及學(xué)習(xí)有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • 關(guān)于Redis的內(nèi)存淘汰策略詳解

    關(guān)于Redis的內(nèi)存淘汰策略詳解

    當(dāng)內(nèi)存空間使用達(dá)到限制時,Redis 會根據(jù)配置策略來選擇不同處理方式,要么返回 errors,要么按照不同的策略算法來清除一些舊數(shù)據(jù),達(dá)到回收內(nèi)存的目的,這就是 Redis 的內(nèi)存淘汰,有些文章中,內(nèi)存淘汰也叫緩存回收,需要的朋友可以參考下
    2023-05-05
  • 基于redis實現(xiàn)定時任務(wù)的方法詳解

    基于redis實現(xiàn)定時任務(wù)的方法詳解

    這篇文章主要給大家介紹了基于redis實現(xiàn)定時任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Redis?持久化原理分析和使用建議詳解

    Redis?持久化原理分析和使用建議詳解

    本文主要介紹了Redis提供的三大持久化機制,即AOF日志、RDB快照以及混合持久化機制,結(jié)合圖文實例給大家講解的非常詳細(xì),感興趣的朋友一起看看吧
    2025-02-02
  • redis實現(xiàn)簡單隊列

    redis實現(xiàn)簡單隊列

    這篇文章主要為大家詳細(xì)介紹了redis實現(xiàn)簡單隊列的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Redis之RedisTemplate配置方式(序列和反序列化)

    Redis之RedisTemplate配置方式(序列和反序列化)

    這篇文章主要介紹了Redis之RedisTemplate配置方式(序列和反序列化),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Redis數(shù)據(jù)遷移RedisShake的實現(xiàn)方法

    Redis數(shù)據(jù)遷移RedisShake的實現(xiàn)方法

    本文主要介紹了Redis數(shù)據(jù)遷移RedisShake的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解Redis中的List類型

    詳解Redis中的List類型

    這篇文章主要介紹了Redis中的List類型,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 關(guān)于redigo中PubSub的一點小坑分析

    關(guān)于redigo中PubSub的一點小坑分析

    這篇文章主要給大家介紹了關(guān)于redigo中PubSub的一點小坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 關(guān)于redis Key淘汰策略的實現(xiàn)方法

    關(guān)于redis Key淘汰策略的實現(xiàn)方法

    下面小編就為大家?guī)硪黄P(guān)于redis Key淘汰策略的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論