【每日筆記】【Go學習筆記】2019-01-02 Codis筆記

作者:施洪寶

一. go 基礎

  1. go通過鎖或者原子操作解決協程之間的競爭問題, 本文主要介紹鎖
  2. go通過通道(有緩衝和無緩衝)解決協程之間的通信問題, 一個協程可能同時與多個其他協程通信, 此時可以通過select進行處理

1.1 鎖

  1. mutex
  • mutex即是一般的互斥鎖, 只有一個協程可以獲取鎖, 其他協程獲取時會被阻塞
  1. rwmutex
  • rwmutex爲讀寫鎖, 某一時刻可能存在多個讀鎖或者一個寫鎖
  • lock可以獲取寫鎖, 該調用會一直阻塞直到其他協程釋放鎖, 寫鎖的優先級高於讀鎖; unlock釋放寫鎖
  • rlock獲取讀鎖, 當只有讀鎖或者沒有鎖時可以成功獲取鎖, 否則被阻塞; runlock釋放讀鎖

1.2 select

select{
 case communication clause:
 statement(s)
 case communication clause:
 statement(s)
 /* 可以定義任意多個case */
 /* default也可以不定義 */
 default:
 statement(s)
}
  • 每個case 必須是chan操作, 可以爲讀或者寫
  • 如果只有一個case可以執行, 則執行該case
  • 如果有多個case可以執行, 僞隨機一個case執行, 其他不執行
  • 沒有case可以執行則執行default
  • 沒有default並且沒有case可以執行則一直阻塞, 直到某個case可以執行

二. Codis

  1. Codis的結構圖如下(該圖來源於https://github.com/CodisLabs/...

image

  1. 從Codis結構圖中可以看出以下幾點
  • codis-group由多個codis-server(也就是redis-server)構成,每個codis-group中存在一個master服務器和任意多個slave服務器
  • codis-proxy與每個codis-group中的服務器建立連接,並且將自己註冊到zookeeper(或者etcd等)中, 客戶端從zookeeper中獲取可用的codis-proxy, 並與其建立連接, 之後由codis-proxy負責處理客戶端的請求
  • codis-dashboard爲codis集羣管理工具: 能夠完成codis-proxy、codis-group、codis-server的增加以及刪除; 數據在codis-group之間的遷移(也就是slot遷移)
  • codis-fe爲集羣管理頁面

Codis自帶的測試程序

  1. codis-fe默認監聽的端口爲9090
  2. codis-dashboard默認的監聽端口爲18080
  3. codis-proxy默認的監聽端口爲11080
  4. codis-server默認監聽的端口爲6379(也就是redis默認的監聽端口)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章