最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis實現(xiàn)多級緩存同步方案詳解

 更新時間:2022年12月21日 15:16:36   作者:linyb極客之路  
這篇文章主要介紹了redis實現(xiàn)多級緩存同步方案詳解,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言

前陣子參加業(yè)務部門的技術方案評審,故事的背景是這樣:業(yè)務部門上線一個專為公司高管使用的系統(tǒng)。這個系統(tǒng)技術架構形如下圖

按理來說這個系統(tǒng)因為受眾很小,可以說基本上沒并發(fā),業(yè)務也沒很復雜,但就是這么一個系統(tǒng),連續(xù)2次出現(xiàn)數(shù)據(jù)庫宕機,而導致系統(tǒng)無法正常運行。因為這幾次事故,業(yè)務部門負責人組織這次技術方案評審,主題如何避免再次出現(xiàn)類似這種故障?

當時有個比較資深的技術,他提出當數(shù)據(jù)庫出現(xiàn)宕機時,可以切換到redis,redis里面緩存熱點數(shù)據(jù),另外一個技術說他贊同這個方案,但他提出不需要用到redis,直接用本地緩存即可。因為tomcat是集群部署,就等于本地緩存也具備了集群能力。而如果切換成redis,redis也可能會掛現(xiàn)象。

然后那個說用redis的技術又說,用本地緩存,如果數(shù)據(jù)變更,其他集群的本地緩存如何感知數(shù)據(jù)已經(jīng)發(fā)生變化,他覺得還是用redis靠譜,首先redis容量肯定是比本地緩存高,而且redis也可以部署集群,可用性可以得到保障,利用redis集中存儲,當數(shù)據(jù)發(fā)生變更,其他集群也可以感知到。

在他們爭論不休的情況下,有人提出不然就同時使用,當數(shù)據(jù)庫掛了,切換到redis,redis掛了,使用本地緩存。這個方案得到不少人的同意,包括這兩個爭論不休的技術。但使用這種方案,就得考慮多級緩存數(shù)據(jù)如何同步。

鋪墊了那么多,才剛要說今天的主題,多級緩存數(shù)據(jù)如何進行同步

多級緩存數(shù)據(jù)同步

1、方案一:使用MQ或者canal進行同步

方案如下圖

如果是使用MQ來同步,實現(xiàn)方案大致如下,數(shù)據(jù)發(fā)生變更,業(yè)務系統(tǒng)發(fā)送變更數(shù)據(jù)到MQ,其他系統(tǒng)從MQ消費。

如果是使用canal,實現(xiàn)方案大致如下,數(shù)據(jù)發(fā)生變更,canal會接到到變更的binlog,業(yè)務系統(tǒng)編寫canal tcp客戶端,和canal進行交互獲取變更數(shù)據(jù)

2、方案二:利用redis6提供的客戶端緩存機制

方案如下圖

redis6客戶端緩存實現(xiàn)機制原理,官方有詳細文檔介紹,感興趣大家可以查看如下鏈接
https://redis.io/docs/manual/client-side-caching/

這邊就講下如何使用

如何使用redis6客戶端緩存

前置條件:redis服務端版本必須是>=6。lettuce版本>=6 目前java的redis客戶端找了一圈,貌似只有l(wèi)ettuce 6支持,其他客戶端估計后期會支持

1、項目中pom引入lettuce GAV

  <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
            <version>6.1.8.RELEASE</version>
        </dependency>

2、利用lettuce6提供的ClientSideCaching進行實現(xiàn)

    /**
     * 客戶端緩存同步
     *
     */
    public String getClientCacheValue(Map<String,String> clientCache,String key){
        StatefulRedisConnection<String, String> connect = redisClient.connect();
      //  Map<String,String> clientCache = new ConcurrentHashMap<>();
        CacheFrontend<String,String> frontend = ClientSideCaching.enable(CacheAccessor.forMap(clientCache),
                connect, TrackingArgs.Builder.enabled().noloop());
        return frontend.get(key);

    }

3、測試

    @Override
    public void run(ApplicationArguments args) throws Exception {
        while(true){
            System.out.println(lettuceRedisTemplate.getClientCacheValue("zhangsan"));
            TimeUnit.SECONDS.sleep(1);
        }


    }

redis里面的zhangsan數(shù)據(jù)未發(fā)生變更時,

控制臺輸出的數(shù)據(jù)為

我們將redis zhangsan的密碼改成9999,

看本地緩存能否立馬捕捉到

控制臺發(fā)現(xiàn)密碼已經(jīng)改成9999

總結

由示例我們可以看出redis6提供了一個很好的多級緩存同步的實現(xiàn)方案。

我們再聊下那個技術評審的后續(xù),后面業(yè)務部門并沒有采用當mysql宕機,使用redis作為兜底,也沒采用本地緩存,更沒采用兩者結合的方案。

不知道大家開會的時候,有沒有這樣的體會,有時候我們在聊一個東西,后面聊著聊著就發(fā)散出去,把方向搞丟了。業(yè)務部門他們需要數(shù)據(jù)庫宕機的解決方案嗎,看著像是,其實他們更核心的需要,是業(yè)務系統(tǒng)不宕機。

奧卡姆剃刀定律:如無必要,勿增實體。其實不管加redis或者本地緩存,額外都增加系統(tǒng)維護成本。因為系統(tǒng)本身不復雜,加了緩存,就要額外考慮緩存數(shù)據(jù)一致性等

后面業(yè)務部門的處理方式,是將自己搭建的mysql,切換成云廠商的mysql。這樣的好處是,云廠商的mysql會更穩(wěn)定,其次當出現(xiàn)問題,可以找云廠商進行解決,畢竟云廠商的運維能力是比較強的,花錢買心安

這次事故會讓業(yè)務部門那么重視,主要是使用方是高管,如果是一般使用者,掛就掛吧,大不了重啟,使用對象不一樣,應急處理方式就不一樣

demo鏈接

https://github.com/lyb-geek/springboot-learning/tree/master/springboot-localcache-redis-sync

到此這篇關于redis實現(xiàn)多級緩存同步的文章就介紹到這了,更多相關redis 多級緩存同步內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Redis集群的關閉與重啟操作

    Redis集群的關閉與重啟操作

    這篇文章主要介紹了Redis集群的關閉與重啟操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用Ruby腳本部署Redis Cluster集群步驟講解

    使用Ruby腳本部署Redis Cluster集群步驟講解

    今天小編就為大家分享一篇關于使用Ruby腳本部署Redis Cluster集群步驟講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • redis安裝和配置_動力節(jié)點Java學院整理

    redis安裝和配置_動力節(jié)點Java學院整理

    這篇文章主要介紹了redis安裝和配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Redis全局ID生成器的實現(xiàn)

    Redis全局ID生成器的實現(xiàn)

    全局ID生成器,是一種在分布式系統(tǒng)下用來生成全局唯一ID的工具,本文主要介紹了Redis全局ID生成器的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Redis搜索日期范圍內的查詢示例

    Redis搜索日期范圍內的查詢示例

    Redis作為內存數(shù)據(jù)結構存儲系統(tǒng),雖未專為日期范圍查詢設計,但可通過存儲日期數(shù)據(jù)、使用KEYS命令或有序集合(SortedSet)實現(xiàn)查詢功能,下面就來介紹一下
    2024-09-09
  • Redis分布式緩存-Redis持久化詳解

    Redis分布式緩存-Redis持久化詳解

    RDB持久化將內存數(shù)據(jù)快照到磁盤,用于故障恢復;AOF持久化記錄每個寫命令,提供數(shù)據(jù)安全性,兩者各有優(yōu)缺點,可根據(jù)需求選擇或結合使用
    2024-12-12
  • Redis實戰(zhàn)之Jedis使用技巧詳解

    Redis實戰(zhàn)之Jedis使用技巧詳解

    Jedis?是老牌的?Redis?的?Java?客戶端,提供了比較全面的?Redis?命令的操作支持,也是目前使用最廣泛的客戶端。這篇文章主要為大家詳細介紹了Jedis的使用技巧,需要的可以參考一下
    2022-12-12
  • 詳解如何使用Redis實現(xiàn)分布式鎖

    詳解如何使用Redis實現(xiàn)分布式鎖

    Redis 作為一個獨立的三方系統(tǒng),其天生的優(yōu)勢就是可以作為一個分布式系統(tǒng)來使用,因此使用 Redis 實現(xiàn)的鎖都是分布式鎖,所以本文就給大家講講如何使用Redis實現(xiàn)分布式鎖,感興趣的小伙伴跟著小編來看看吧
    2023-08-08
  • 設置Redis最大占用內存的實現(xiàn)

    設置Redis最大占用內存的實現(xiàn)

    本文主要介紹了設置Redis最大占用內存的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Redis實現(xiàn)用戶簽到的示例代碼

    Redis實現(xiàn)用戶簽到的示例代碼

    Redis的位圖可以高效實現(xiàn)用戶簽到功能,每個bit位對應一個簽到狀態(tài),節(jié)省存儲空間,利用SETBIT、GETBIT等命令操作簽到數(shù)據(jù),可統(tǒng)計連續(xù)簽到天數(shù)和本月簽到情況,感興趣的可以了解一下
    2024-09-09

最新評論

张家界市| 洛浦县| 涿鹿县| 修武县| 扶余县| 东宁县| 寿光市| 石柱| 滁州市| 吉木乃县| 瓮安县| 尉氏县| 尉犁县| 三江| 磐安县| 吉隆县| 广德县| 屏南县| 甘孜县| 武山县| 晋中市| 调兵山市| 卢湾区| 霍城县| 左云县| 留坝县| 象州县| 桂林市| 湘乡市| 和顺县| 文山县| 岳西县| 江孜县| 兴义市| 东丰县| 湄潭县| 鸡泽县| 宁津县| 南溪县| 大化| 乌拉特后旗|