godis v0.0.10 发布,Go 语言的 redis 客户端开发包

栏目: Go · 发布时间: 5年前

内容简介:godis是一个golang实现的redis客户端,参考jedis实现.godis实现了几乎所有的redis命令,包括单机命令,集群命令,管道命令和事物命令等.如果你用过jedis,你就能非常容易地上手godis,因为godis的方法命名几乎全部来自jedis.

godis

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

godis实现了几乎所有的redis命令,包括单机命令,集群命令,管道命令和事物命令等.

如果你用过jedis,你就能非常容易地上手godis,因为godis的方法命名几乎全部来自jedis.

值得一提的是,godis实现了单机和集群模式下的分布式锁,godis的锁比redisson快很多,在i7,8核32g的电脑测试,10万次for循环,8个线程,业务逻辑是简单的count++,reidsson需要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 main
    
     import (
         "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(string(arr))
     }
  2. 使用连接池

    package main
    
     import (
         "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(string(arr))
     }
  3. 发布订阅

    package main
    
     import (
         "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 main
    
     import (
         "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 main
    
     import (
         "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 main
    
     import (
         "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%免费和开源.

鸣谢

联系

piao.hao@qq.com


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning Apache Struts

Beginning Apache Struts

Arnold Doray / Apress / 2006-02-20 / USD 44.99

Beginning Apache Struts will provide you a working knowledge of Apache Struts 1.2. This book is ideal for you Java programmers who have some JSP familiarity, but little or no prior experience with Ser......一起来看看 《Beginning Apache Struts》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试