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

栏目: 软件资讯 · 发布时间: 5年前

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

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


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

查看所有标签

猜你喜欢:

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

Reality Is Broken

Reality Is Broken

Jane McGonigal / Penguin Press HC, The / 2011-1-20 / USD 26.95

Visionary game designer Jane McGonigal reveals how we can harness the power of games to solve real-world problems and boost global happiness. More than 174 million Americans are gamers, and......一起来看看 《Reality Is Broken》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

在线 XML 格式化压缩工具

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

正则表达式在线测试