Java Web分佈式篇之關於redis的幾個問題

redis線程模型

redis線程模型
(圖摘自石杉碼農-視頻課程)

redis性能高的原因

  • 1)純內存操作
  • 2)核心是基於非阻塞的IO多路複用機制
  • 3)單線程反而避免了多線程的頻繁上下文切換問題

redis支持的數據類型及底層實現

數據類型:string,set,sorted set,hash,

底層實現:待補充

redis過期策略(過期後redis怎麼處理)

定期刪除(定期刪除一些過期的key)+惰性刪除(查詢到該key時刪除該過期key)

內存淘汰機制

allkeys-lru:最不常用的優先刪除(此機制最常用)
其他:待補充

手寫一個LRU

繼承linkedHashMap實現,構建指定最先訪問的元素放到列表最後,覆寫相關方法

redis的高併發與高可用

redis主從複製

基本思想:讀寫分離 - 提高redis的QPS,主從複製 - 保證高可用

redis replication
主從架構-各節點使用持久化方案RDB/AOF保證高可用
讀寫分離
水平擴容支撐讀高併發

原理:

  • 1、slave node發送PSYNC命令給master node
  • 2、如果slave node是第一次連接master node,會觸發一次full resynchronization,master會啓動一個後臺線程,開始生成一份RDB快照文件,同時會將從客戶端收到的命令緩存到內存中,RDB文件生成完畢後,master會將這個RDB發送給slave,slave先寫入本地磁盤,然後從磁盤加載到內存中,然後master會將內存中緩存的寫命令發送給slave,slave也會同步這些數據;
    如果不是第一次連接,master node僅賦值給slave缺少的數據即可。
  • 3、slave node如果因網絡故障和master斷開,會自動重連,master如果發現有多個slave都來重新連接,僅會啓動一個rdb save操作,用一份數據服務所有slave

redis哨兵機制

基本思想:保證redis高可用

redis緩存數據庫一致性

讀請求:先讀緩存->無則讀數據庫->更新緩存
寫請求:推薦先更新數據庫,後刪除緩存(降低緩存不一致概率)

redis集羣模式

哈希槽、主從複製等技術

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