介绍
golang使用redis的介绍,这里我使用的是go mod工具进行打包的
go mod的使用
1.初始化mod
//最后一个参数为名称 go mod init goredis
2.使用init后面的参数,如goredis
//goredis这个时候 = 站点根目录 import "goredis/redis"
3.生成vendor目录
//生成vendor目录 go mod vendor
4.根据本地的vendor来编译
go build -mod=vendor main.go
Redis的使用
1.下载redis依赖包
go get -u github.com/gomodule/redigo/redis go mod vendor
2.redis使用
err := redis.Set("aa", "399")
if err != nil {
fmt.Println(err)
}
aa,_ := redis.Get("aa")
redis.Expire("aa", 600) //10分钟后失效
fmt.Println(aa)
Set 写redis
Get 读redis
Expire是设置过期时间
3.启用redis连接池和初始化
请参考pool.go
func init() {//启用连接池
redisHost := os.Getenv("REDIS_HOST")
if redisHost == "" {
redisHost = ":6379"
}
Pool = newPool(redisHost)
cleanupHook()
}
//创建连接池
func newPool(server string) *redis.Pool {
return &redis.Pool{
MaxIdle: 3,//最多开启3个链接
IdleTimeout: 240 * time.Second,//链接超时时间
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", server)
if err != nil {
return nil, err
}
return c, err
},
TestOnBorrow: func(c redis.Conn, t time.Time) error {
_, err := c.Do("PING")
return err
},
}
}
4.redis方法内部实现
请参考util.go
package redis
import (
"fmt"
"github.com/gomodule/redigo/redis"
)
func Ping() error {
conn := Pool.Get()
defer conn.Close()
_, err := redis.String(conn.Do("PING"))
if err != nil {
return fmt.Errorf("cannot 'PING' db: %v", err)
}
return nil
}
func Get(key string) (string, error) {
conn := Pool.Get()
defer conn.Close()
var data string
data, err := redis.String(conn.Do("GET", key))
return data, err
}
func Set(key string, value string) error {
conn := Pool.Get()
defer conn.Close()
_, err := conn.Do("SET", key, value)
if err != nil {
fmt.Println("redis set failed:", err)
}
return err
}
//设置过期时间,second如 24*3600
func Expire(key string, second int) error {
conn := Pool.Get()
defer conn.Close()
n, err := conn.Do("EXPIRE", key, second)
if n == int64(1) {
return nil
}
return err
}
//判断是否存在key
func Exists(key string) (bool, error) {
conn := Pool.Get()
defer conn.Close()
ok, err := redis.Bool(conn.Do("EXISTS", key))
if err != nil {
return ok, fmt.Errorf("error checking if key %s exists: %v", key, err)
}
return ok, err
}
func Delete(key string) error {
conn := Pool.Get()
defer conn.Close()
_, err := conn.Do("DEL", key)
return err
}
func Incr(counterKey string) (int, error) {
conn := Pool.Get()
defer conn.Close()
return redis.Int(conn.Do("INCR", counterKey))
}
conn.Do("redis命令",参数key, 其它参数...)