V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
pubby
V2EX  ›  Go 编程语言

go 上有什么稳定可靠的 Redis 包,求 V 友推荐一下

  •  
  •   pubby · 2014-05-20 14:24:03 +08:00 · 2608 次点击
    这是一个创建于 3873 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 需要支持自定义命令的请求,因为DB端是一个使用redis协议(扩展了部分命令)的leveldb存储
    2. 稳定可靠

    目前在用 https://github.com/garyburd/redigo

    第1点满足,
    但是高并发下偶尔会死锁,发生过好几次了。

    https://github.com/vmihailenco/redis 也用过,体验不佳
    第 1 条附言  ·  2014-05-21 13:06:16 +08:00
    已解决。

    原因已查到,不是redis本身的问题,是在连接redis服务器的时候net.Dial() 偶然会block,
    同一局域网内,原因未知。
    版本:go version go1.2.1 freebsd/amd64

    目前解决办法:
    往连接池补充的时候使用双连接,同时加上超时重试,通过一晚上测试,工作良好。

    大致代码:
    // 双连接channel
    chanClient := make(chan *redis.Client,2)

    var newClient = func(channel chan *redis.Client){
    c,err := redis.Dial(....)
    if err != nil {
    return
    }
    channel<-c
    }
    go newClient(chanClient)
    go newClient(chanClient) //连接2次

    select {

    case client:= <- chanClient :
    // 成功连接,加入连接池
    // 代码,略

    case <-time.After(...一个短的超时...)
    // 双连接都不行,重试几次看看
    }

    go func(channel *redis.Client,n int){
    // 因为之前连接两次,
    // 1. 收集剩下的连接结果,有成功的加入连接池
    // 2. 一个较大的超时时间,过后就认为所有连接失败,忽略它们
    }(chanClient,waitNclients)
    6 条回复    2014-05-21 13:08:33 +08:00
    nigelvon
        1
    nigelvon  
       2014-05-20 15:03:35 +08:00
    我也用过几个感觉都不是太好。
    pubby
        2
    pubby  
    OP
       2014-05-20 15:53:20 +08:00
    @nigelvon
    目前在试这个 https://github.com/fzzy/radix

    测试稳定性中.....
    se77en
        3
    se77en  
       2014-05-20 17:09:11 +08:00
    github 上选 star 最多的
    gihnius
        4
    gihnius  
       2014-05-20 19:29:40 +08:00   ❤️ 1
    pubby
        5
    pubby  
    OP
       2014-05-20 19:37:56 +08:00
    @gihnius 看过了,没有暴露发送自定义命令的接口

    @se77en 之前用的就是star最多的


    最后换 https://github.com/fzzy/radix 还是死锁

    但是翻遍了它的代码,根本没用锁的地方。

    之前的设计是每次请求都连接一次redis,链接确实很频繁,我怀疑是go底层的问题

    现在弄了个简单连接池复用,看看有没有改善....
    pubby
        6
    pubby  
    OP
       2014-05-21 13:08:33 +08:00   ❤️ 1
    @nigelvon
    @se77en
    @gihnius 已解决,见 APPEND
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   999 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:15 · PVG 05:15 · LAX 13:15 · JFK 16:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.