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,主從複製 - 保證高可用
原理:
- 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集羣模式
哈希槽、主從複製等技術