安装
go-redisgo moudle
go mod init github.com/my/repo
之后就是进行安装(注意在导入路径中的V8字段)
go get github.com/go-redis/redis/v8
redis Service
redis Service
import "github.com/go-redis/redis/v8"
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // 密码设置
DB: 0, // redis的默认数据库选择
})
另一种受欢迎的方式是使用连接字符串:
opt, err := redis.ParseURL("redis://<user>:<pass>@localhost:6379/<db>")
if err != nil {
panic(err)
}
rdb := redis.NewClient(opt)
使用 TLS加密层
tls.Configtls.Config
rdb := redis.NewClient(&redis.Options{
TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS12,
//Certificates: []tls.Certificate{cert}
},
})
x509: cannot validate certificate for xxx.xxx.xxx.xxx because it doesn't contain any IP SANsServerName
rdb := redis.NewClient(&redis.Options{
TLSConfig: &tls.Config{
MinVersion: tls.VersionTLS12,
ServerName: "your.domain.com",
},
})
通过SSH连接
连接SSH通道:
sshConfig := &ssh.ClientConfig{
User: "root",
Auth: []ssh.AuthMethod{ssh.Password("password")},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
Timeout: 15 * time.Second,
}
sshClient, err := ssh.Dial("tcp", "remoteIP:22", sshConfig)
if err != nil {
panic(err)
}
rdb := redis.NewClient(&redis.Options{
Addr: net.JoinHostPort("127.0.0.1", "6379"),
Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) {
return sshClient.Dial(network, addr)
},
// Disable timeouts, because SSH does not support deadlines.
ReadTimeout: -1,
WriteTimeout: -1,
})
dial tcp: i/o timeout
go-redisdial tcp: i/o timeouttelnet
telnet localhost 6379
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
holdApplicationUntilProxyStarts
Context(上下文)
Timeouts
ctx := context.Background()
执行命令:
去执行一个命令:
val, err := rdb.Get(ctx, "key").Result()
fmt.Println(val)
你可以保存这个命令并且在此之后分别访问值和错误信息:
get := rdb.Get(ctx, "key")
fmt.Println(get.Val(), get.Err())
Executing unsupported commands
执行一个不合法或者自定义命令:
val, err := rdb.Do(ctx, "get", "key").Result()
if err != nil {
if err == redis.Nil {
fmt.Println("key does not exists")
return
}
panic(err)
}
fmt.Println(val.(string))
DoCmd
// Text is a shortcut for get.Val().(string) with proper error handling.
//Text 是对get.val().(string)的一个捷径,同时也包含着恰当的错误信息
val, err := rdb.Do(ctx, "get", "key").Text()
fmt.Println(val, err)
完整的方法如下所示:
s, err := cmd.Text()
flag, err := cmd.Bool()
num, err := cmd.Int()
num, err := cmd.Int64()
num, err := cmd.Uint64()
num, err := cmd.Float32()
num, err := cmd.Float64()
ss, err := cmd.StringSlice()
ns, err := cmd.Int64Slice()
ns, err := cmd.Uint64Slice()
fs, err := cmd.Float32Slice()
fs, err := cmd.Float64Slice()
bs, err := cmd.BoolSlice()
redis.Nil
go-redisredis.Nilredis.Nil
redis.Nil
val, err := rdb.Get(ctx, "key").Result()
switch {
case err == redis.Nil:
fmt.Println("key does not exist")
case err != nil:
fmt.Println("Get failed", err)
case val == "":
fmt.Println("value is empty")
}
GETBLPOPZSCOREredis.Nil
Conn对象
ConnClient