Go實現的Memcached客戶端

    使用Go語言實現了一個Memcached的客戶端,源代碼放在 github 上。第一次把本身寫的代碼開源,心情有一點點緊張。把 源代碼 地址公佈在這裏,但願對有須要的人有一點幫助,同時也但願能和志同道合的同窗交流。git

    個人想法是客戶端同時實現 Memcached 的文本和二進制協議,目前,只實現了文本協議。接下來是完善代碼的封裝,而後再進行二進制協議的實現。github

    客戶端的代碼架構很是簡單,核心的部分是:TCP鏈接池 和 服務器選擇 兩部分。緩存

TCP鏈接池服務器

    Memcached協議中提議將與服務器的鏈接緩存起來,減小開銷,提升效率。鏈接池的實現,其實是使用了 channel,這樣能夠避免使用同步鎖。架構

    考慮到會配置多個Memcached服務端,因此是每一個服務端,對應一個鏈接池。如下是建立鏈接池的代碼:memcached

    pool := &ConnectionPool{
        pools  : make([]chan net.Conn, 0, len(config.Servers)),
        config : config,
    }

服務器選擇ui

    同一個key,不管什麼狀況下,都應該選中同一臺服務器。目前服務器選擇的實現原理是,先取得 key 的hash code,而後再與服務器數量取餘 來進行定位。這樣作有一個缺點,若是對於的 Memcached 服務器故障,這個key永遠沒法進行緩存(已經在考慮怎麼解決)。code

    hashCode := crc32.ChecksumIEEE([]byte(key))
 
    index = hashCode % uint32(len(servers))


    先簡單的介紹一下,詳細如何使用,請到 github 查看。server

相關文章
相關標籤/搜索