Go实现的Memcached客户端

作者分享了使用Go语言实现的Memcached客户端源代码,并开源在GitHub上。文章详细介绍了客户端的核心架构,包括TCP连接池和服务器选择机制,并讨论了服务器选择的优化方向。读者可以获取代码资源并了解Memcached客户端的开发实践。

    使用Go语言实现了一个Memcached的客户端,源代码放在 github 上。第一次把自己写的代码开源,心情有一点点紧张。把 源代码 地址公布在这里,希望对有需要的人有一点帮助,同时也希望能和志同道合的同学交流。

    我的想法是客户端同时实现 Memcached 的文本和二进制协议,目前,只实现了文本协议。接下来是完善代码的封装,然后再进行二进制协议的实现。

    客户端的代码架构非常简单,核心的部分是:TCP连接池 和 服务器选择 两部分。

TCP连接池

    Memcached协议中提议将与服务器的连接缓存起来,减少开销,提高效率。连接池的实现,实际上是使用了 channel,这样可以避免使用同步锁。

    考虑到会配置多个Memcached服务端,所以是每个服务端,对应一个连接池。以下是创建连接池的代码:

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

服务器选择

    同一个key,无论什么情况下,都应该选中同一台服务器。目前服务器选择的实现原理是,先取得 key 的hash code,然后再与服务器数量取余 来进行定位。这样做有一个缺点,如果对于的 Memcached 服务器故障,这个key永远无法进行缓存(已经在考虑怎么解决)。

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


    先简单的介绍一下,详细如何使用,请到 github 查看。

转载于:https://my.oschina.net/nk2011/blog/286574

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值