这是我参与[第五届青训营]的第十五天
Gin是一个用Golang编写的高性能HTTP web框架。它包含路由和中间件等开箱即用的特性和功能。这有助于减少样板代码,提高生产力,并简化构建微服务的过程。
Redis是内存中的数据存储,用作数据库、缓存或消息代理。Go redis/redis是一个类型安全的redis客户端库,支持Pub/Sub、sentinel和流水线等功能。
Go-redis 是一个用于 Go 的类型安全的 Redis 客户端库,支持Pub/Sub、sentinel和流水线等功能。它是一个能够支持 Redis 集群的 Redis 客户端,旨在自动存储和更新插槽信息集群变化。以下是 Go-redis 的吸引人的特性:
- Go-redis 具有池功能。(池允许您安全地处理 go-routines,如果发生任何错误则自动重新连接)
- 它同时支持标准、OSS 集群 AIP 和 Sentinel
- 带有自动重新连接/自动重新发现错误/迁移的集群插槽
- 支持仪器
- 允许自定义拨号器
- 支持 Redis sentinel
以下是使用redis的简单例子。
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func main() {
fmt.Println("Testing Golang Redis")
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})
pong, err := client.Ping(client.Context()).Result()
fmt.Println(pong, err)
}
创建redis客户端的代码如下:
package db
import (
"context"
"errors"
"github.com/go-redis/redis/v8"
)
type Database struct {
Client *redis.Client
}
var (
ErrNil = errors.New("no matching record found in redis database")
Ctx = context.TODO()
)
func NewDatabase(address string) (*Database, error) {
client := redis.NewClient(&redis.Options{
Addr: address,
Password: "",
DB: 0,
})
if err := client.Ping(Ctx).Err(); err != nil {
return nil, err
}
return &Database{
Client: client,
}, nil
}
上面的代码创建了一个数据库结构来包装redis客户端,并将其暴露给应用程序的其他部分(路由器等)。它还设置了两个包级别的变量——ErrNil,用于告诉调用代码redis操作返回nil和Ctx,这是一个用于客户端的空上下文。我们还创建了一个NewDatabase函数,用于设置客户端并使用PING命令检查连接是否有效。