Redis小知識

Redis是啥

redis: Remote Dictionary Service遠程字典服務

Redis的端口爲什麼是6379?

這個端口號也不 是隨機選的,而是由手機鍵盤字母MERZ的位置決定的。MERZ在 Antirez(Redis的作者)的朋友圈語言中是《愚蠢》的代名詞,它源於意大利 廣告女郎Alessia Merz在電視節目上說了一 堆愚蠢的話.

Redis的過期清理?

redis使用hashtable存儲數據的過期時間,但不會時刻去檢測數據是否過期,清理過期數據主要分兩個階段完成,第一是在定時器(serverCron)去定時清理過期數據(每隔100毫秒),另一個階段是在用戶獲取數據的時候去執行(get, hget)

Redis的內存不夠如何處理?

  1. 使用VM虛擬內存
    • 爲什麼操作系統已經實現了虛擬內存的功能,redis還要重複造輪子: 操作系統的虛擬內存是基於頁的概念,linux中每個頁大小爲4K, redis中大多數的對象遠小於,而且redis中的list,set可能存在與多個頁
  2. 使用內存淘汰
    • 隨機淘汰
    • LRU淘汰算法: 刪除一個最近最少訪問的key
    • TTL淘汰算法: 刪除一個最快過期的key

Redis的命令衝突

  1. get與del命令衝突: 當客戶端獲取一個比較大的key時(無法通過一個網絡IO傳輸完畢), 這時候另一個客戶端執行del命令刪除這個key,可能會導致內存段錯誤

解決方法: 使用引用計數器,當有客戶端或其他引用的時候,計數器加一,引用失效的時候減一.當計數器爲零的時候就刪除這個

Redis爲什麼是單線程

因爲Redis是基於內存的操作,CPU不是Redis的瓶頸,Redis的瓶頸最有可能是機器內存的大小或者網絡帶寬。既然單線程容易實現,而且CPU不會成爲瓶頸,那就順理成章地採用單線程的方案了(畢竟採用多線程會有很多麻煩!)。

Redis的主從同步原理

在這裏插入圖片描述

  • slave服務器連接到master,發送SYCN請求同步數據
  • master將數據備份到rdb文件,然後傳輸到slave服務器
  • slave服務器先清空數據庫,然後再把rdb文件數據導入
  • 之後master服務器每次數據更新會通過命令形式轉發到slave,slave去執行

如何設置主從同步: slave服務器配置文件中新增 slaveoff127.0.0.2 6379

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