• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

godis: godis 是一个 golang 实现的 redis 客户端,参考 jedis 实现。godis 实现了几 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

godis

开源软件地址:

https://gitee.com/piaohao/godis

开源软件介绍:

godis

Go DocBuild StatusGo ReportcodecovLicense

godis是一个golang实现的redis客户端,参考jedis实现.
godis实现了几乎所有的redis命令,包括单机命令,集群命令,管道命令和事物命令等.
如果你用过jedis,你就能非常容易地上手godis,因为godis的方法命名几乎全部来自jedis.
值得一提的是,godis实现了单机和集群模式下的分布式锁,godis的锁比redisson快很多,在i7,8核32g的电脑测试,10万次for循环,8个线程,业务逻辑是简单的count++,redisson需要18-20秒,而godis只需要7秒左右.
godis已经完成了大多数命令的测试用例,比较稳定.
非常高兴你能提出任何建议,我会积极地迭代这个项目.

特色

  • cluster集群
  • pipeline管道
  • transaction事物
  • distributed lock分布式锁
  • 其他功能在持续开发中

安装

go get -u github.com/piaohao/godis

或者使用 go.mod:

require github.com/piaohao/godis latest

文档

快速开始

  1. 基本例子

    package mainimport (    "github.com/piaohao/godis")func main() {    redis := godis.NewRedis(&godis.Option{        Host: "localhost",        Port: 6379,        Db:   0,    })    defer redis.Close()    redis.Set("godis", "1")    arr, _ := redis.Get("godis")    println(arr)}
  2. 使用连接池

    package mainimport (    "github.com/piaohao/godis")func main() {    option:=&godis.Option{        Host: "localhost",        Port: 6379,        Db:   0,    }    pool := godis.NewPool(&godis.PoolConfig{}, option)    redis, _ := pool.GetResource()    defer redis.Close()    redis.Set("godis", "1")    arr, _ := redis.Get("godis")    println(arr)}
  3. 发布订阅

    package mainimport (    "github.com/piaohao/godis"    "time")func main() {    option:=&godis.Option{        Host: "localhost",        Port: 6379,        Db:   0,    }    pool := godis.NewPool(&godis.PoolConfig{}, option)    go func() {        redis, _ := pool.GetResource()        defer redis.Close()        pubsub := &godis.RedisPubSub{            OnMessage: func(channel, message string) {                println(channel, message)            },            OnSubscribe: func(channel string, subscribedChannels int) {                println(channel, subscribedChannels)            },            OnPong: func(channel string) {                println("recieve pong")            },        }        redis.Subscribe(pubsub, "godis")    }()    time.Sleep(1 * time.Second)    {        redis, _ := pool.GetResource()        defer redis.Close()        redis.Publish("godis", "godis pubsub")        redis.Close()    }    time.Sleep(1 * time.Second)}
  4. cluster集群

    package mainimport (    "github.com/piaohao/godis"    "time")func main() {    cluster := godis.NewRedisCluster(&godis.ClusterOption{        Nodes:             []string{"localhost:7000", "localhost:7001", "localhost:7002", "localhost:7003", "localhost:7004", "localhost:7005"},        ConnectionTimeout: 0,        SoTimeout:         0,        MaxAttempts:       0,        Password:          "",        PoolConfig:        &godis.PoolConfig{},    })    cluster.Set("cluster", "godis cluster")    reply, _ := cluster.Get("cluster")    println(reply)}
  5. pipeline管道

    package mainimport (    "github.com/piaohao/godis"    "time")func main() {    option:=&godis.Option{        Host: "localhost",        Port: 6379,        Db:   0,    }    pool := godis.NewPool(&godis.PoolConfig{}, option)    redis, _ := pool.GetResource()    defer redis.Close()    p := redis.Pipelined()    infoResp, _ := p.Info()    timeResp, _ := p.Time()    p.Sync()    timeList, _ := timeResp.Get()    println(timeList)    info, _ := infoResp.Get()    println(info)}
  6. transaction事物

    package mainimport (    "github.com/piaohao/godis"    "time")func main() {    option:=&godis.Option{        Host: "localhost",        Port: 6379,        Db:   0,    }    pool := godis.NewPool(nil, option)    redis, _ := pool.GetResource()    defer redis.Close()    p, _ := redis.Multi()    infoResp, _ := p.Info()    timeResp, _ := p.Time()    p.Exec()    timeList, _ := timeResp.Get()    println(timeList)    info, _ := infoResp.Get()    println(info)}
  7. distribute lock分布式锁

    • single redis
         package main      import (       "github.com/piaohao/godis"       "time"   )      func main() {       locker := godis.NewLocker(&godis.Option{             Host: "localhost",             Port: 6379,             Db:   0,         }, &godis.LockOption{             Timeout: 5*time.Second,         })       lock, err := locker.TryLock("lock")       if err == nil && lock!=nil {           //do something           locker.UnLock(lock)       }          }
    • redis cluster
         package main      import (       "github.com/piaohao/godis"       "time"   )      func main() {       locker := godis.NewClusterLocker(&godis.ClusterOption{       	Nodes:             []string{"localhost:7000", "localhost:7001", "localhost:7002", "localhost:7003", "localhost:7004", "localhost:7005"},           ConnectionTimeout: 0,           SoTimeout:         0,           MaxAttempts:       0,           Password:          "",           PoolConfig:        &godis.PoolConfig{},       },&godis.LockOption{           Timeout: 5*time.Second,       })       lock, err := locker.TryLock("lock")       if err == nil && lock!=nil {           //do something           locker.UnLock(lock)       }   }

证书

godis 使用的是 MIT License, 永远100%免费和开源.

鸣谢

联系

[email protected]


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap