From f8d9f8c5e239de699003eacf8be0ba592c084367 Mon Sep 17 00:00:00 2001 From: "suguo.yao" Date: Wed, 12 May 2021 17:03:38 +0800 Subject: [PATCH] =?UTF-8?q?charpeter01=E5=AD=A6=E4=B9=A0redigo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ README.md | 17 +++++++++++++- charpeter01/main.go | 56 +++++++++++++++++++++++++++++++++++++++++++++ charpeter02/main.go | 7 ++++++ conf/conf.go | 7 ++++++ go.mod | 5 ++++ 6 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 charpeter01/main.go create mode 100644 charpeter02/main.go create mode 100644 conf/conf.go create mode 100644 go.mod diff --git a/.gitignore b/.gitignore index f4d432a..9500f6f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ # Dependency directories (remove the comment below to include it) # vendor/ +.vscode/ +go.sum + diff --git a/README.md b/README.md index ee156c1..5cbf610 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,18 @@ # tutorial-redis -redis技术栈掌握 \ No newline at end of file +### 概述 +golang官方推荐的有redisgo和go-reids,个人认为go-redis的封装更加人性化,redisgo的调用是基于命令的,go-redis是基于方法的。 + +2行代码来比较下2种资源包的调用方式: +redisgo: client.Do("SET", "mykey", "我是数据", "EX", "3600") +go-redis:client.Set("mykey", "我是数据", time.Hour) + +同样是存储一个1小时后过期的数据,go-redis的调用方式明显更友好。 + +### charpeter01 +基本使用,其中指令部分与redis-cli一致。 +github.com/gomodule/redigo/redis + +### charpeter02 +基本使用 +https://github.com/go-redis/redis \ No newline at end of file diff --git a/charpeter01/main.go b/charpeter01/main.go new file mode 100644 index 0000000..ed94b87 --- /dev/null +++ b/charpeter01/main.go @@ -0,0 +1,56 @@ +package main + +import ( + "fmt" + "time" + + redigo "github.com/gomodule/redigo/redis" + "myschools.me/suguo/tutorial-redis/conf" +) + +func main() { + pool := &redigo.Pool{ + Dial: func() (redigo.Conn, error) { + return redigo.Dial("tcp", conf.Host, + redigo.DialDatabase(conf.Database), + redigo.DialPassword(conf.Password), + ) + }, + TestOnBorrow: func(c redigo.Conn, t time.Time) error { + if time.Since(t) < time.Minute { + return nil + } + _, err := c.Do("PING") + return err + }, + MaxIdle: 100, + MaxActive: 100, + IdleTimeout: 60 * time.Second, + Wait: false, + MaxConnLifetime: 0, + } + + fmt.Printf("连接数:%d\n", pool.ActiveCount()) + + conn := pool.Get() + defer conn.Close() + + //判断key是否存在 + a, _ := conn.Do("EXISTS", "cp01") + i := a.(int64) + fmt.Printf("cp01的key是否存在:%d\n", i) + if i > 0 { + data, err := redigo.Bytes(conn.Do("GET", "cp01")) + if err != nil { + fmt.Printf("GET redis错误: %s\n", err.Error()) + } + fmt.Printf("cp01内容:%s\n", data) + } + + //设置一个值,单位s + r, err := conn.Do("SETEX", "cp01", 600, []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ")) + if err != nil { + fmt.Printf("写入redis错误: %s\n", err.Error()) + } + fmt.Printf("cp01写入后的返回:%v\n", r) +} diff --git a/charpeter02/main.go b/charpeter02/main.go new file mode 100644 index 0000000..d8fa929 --- /dev/null +++ b/charpeter02/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("hello") +} diff --git a/conf/conf.go b/conf/conf.go new file mode 100644 index 0000000..111df87 --- /dev/null +++ b/conf/conf.go @@ -0,0 +1,7 @@ +package conf + +const ( + Host string = "192.168.8.254:6379" + Password string = "Test1231" + Database int = 1 +) diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..eee6fe9 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module myschools.me/suguo/tutorial-redis + +go 1.15 + +require github.com/gomodule/redigo v1.8.4