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

相关文章
相关标签/搜索