8.redis緩存與數據的一致性

一.實時同步

對強一致性要求比較高的,應採用實時同步方案,即查詢緩存查詢不到再去從DB查詢,更新緩存的時先更新數據庫,再將緩存的設置過期。
@Cacheable :查詢時使用,注意long類型需要轉換爲string類型,否則會拋異常
@CachePut: 更新時使用,使用次註解,一定會從DB中查詢數據
@CacheEvict :刪除時使用,
@Caching:組合使用

非實時同步:
一方修改,另一方補血藥同步修改

1個文章  1分鐘內被點擊1000萬次(點擊數1000萬)
定時任務(凌晨2點觸發定時任務):將redis中得redis num查詢出來更新到mysql中
redis  incr  num
musql  num = 0;

二.異步隊列

併發量很高的話,可以採用異步隊列的方式同步,可採用kafka等消息中間件處理消息生產和消費

activemq rabbitmq zeromq rockermq kafka

Kafka:免費,性能很高
         性能高,但是是在硬盤上
rockermq:優點是消息的可靠性高(0丟失),功能強大,價格昂貴
rabbitmq:apache

三.使用阿里的同步工具canal

canal的實現方式是模擬musql slave 和master 的同步機制,監控DB bitlog的日誌更新來觸發緩存的更新,此種方法可以解放程序員的雙手,減少工作量,但在使用的時候有侷限性

canal的工作原理

在這裏插入圖片描述

  1. canal模擬mysql slave 的交互協議,僞裝自己爲mysql slave,向mysql master 發送dump協議
  2. mysql master 收到dump的請求,開始推送binary log給slave (也就是canal)
  3. canal解析binary log (原始爲byte流)

四.採用UDF自定義函數的方式

面對mysql的API進行編程,利用出發器進行緩存同步,但UDF主要是C/C++語言實現,學習成本高

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章