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

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

智能

智能

[法]弗雷德里克·马特尔 / 君瑞图、左玉冰 / 商务印书馆 / 2015-8 / 59.90

揭示数字化主流大趋势的最新权威论著 《主流》作者的最新力作!与法国秋季新版同步上市! 面对数字化时代的到来,美国、欧盟、中国、俄罗斯、印度、巴西、古巴、伊朗、南非、韩国、新加坡、肯尼亚、墨西哥、日本等世界各国各地区正在如何应对? 在国际地缘政治格局下如何把握数字化主流的大趋势? 谷歌、苹果、脸书、亚马逊、阿里巴巴、腾讯、中兴、华为等大家熟知的网络巨头接受了作者的采访。作者的......一起来看看 《智能》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具