开源软件名称:godis
开源软件地址:https://gitee.com/piaohao/godis
开源软件介绍:
godis
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 文档快速开始基本例子 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)} 使用连接池 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)} 发布订阅 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)} 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)} 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)} 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)} 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] |
请发表评论