golang 中redis 的应用初解|青训营笔记

70 阅读2分钟

这是我参与[第五届青训营]的第十五天

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命令检查连接是否有效。