Go(Golang)的Redis客户端——go-redis和radix

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Go(Golang)的Redis客户端:go-redis和radix



Redis是最流行的内存数据库之一,用于缓存、队列、会话和实时分析。在Go(Golang)生态系统中,有几个成熟的Redis客户端。本文将详细讲解两个主要库:go-redis(最流行的客户端)和radix(性能更高、更底层的客户端)。您将了解如何安装、连接、执行基本操作、使用管道、Pub/Sub以及处理集群。



1. 为什么Redis对Go开发者很重要

Go通常用于构建高负载服务器应用、微服务和事件处理器。Redis通过以下特性很好地补充了Go:

  • 速度——操作在微秒内完成。
  • 简洁性——极简API,内置数据结构(字符串、列表、集合、哈希)。
  • 支持Pub/Sub、事务和Lua脚本。

正确选择客户端决定了性能和开发便利性。



2. go-redis——事实上的标准

go-redis(仓库 github.com/redis/go-redis/v9)是Go最流行的Redis客户端。它提供高级API,支持集群、哨兵、管道、Pub/Sub和分布式锁。



2.1 安装

go get github.com/redis/go-redis/v9


2.2 连接到Redis

package main

import ( "context" "fmt" "github.com/redis/go-redis/v9")

func main() { ctx := context.Background()

rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // 无密码 DB: 0, // 默认数据库 })

// 检查连接 pong, err := rdb.Ping(ctx).Result() if err != nil { panic(err) } fmt.Println(pong) // PONG}


2.3 基本操作

// 设置字符串err := rdb.Set(ctx, "key", "value", 0).Err()if err != nil {    panic(err)}

// 获取字符串val, err := rdb.Get(ctx, "key").Result()if err != nil { panic(err)}fmt.Println("key:", val)

// 操作哈希rdb.HSet(ctx, "user:1", "name", "Alice", "age", 30)name, _ := rdb.HGet(ctx, "user:1", "name").Result()fmt.Println("姓名:", name)

// 删除键rdb.Del(ctx, "key")


2.4 管道(Pipelines)

管道允许在一次网络调用中发送多个命令,从而显著加快批量操作。

pipe := rdb.Pipeline()

incr := pipe.Incr(ctx, "counter")pipe.Expire(ctx, "counter", time.Hour)

// 执行所有命令_, err := pipe.Exec(ctx)if err != nil { panic(err)}

fmt.Println("计数器新值:", incr.Val())


2.5 Pub/Sub

// 订阅者sub := rdb.Subscribe(ctx, "mychannel")ch := sub.Channel()

for msg := range ch { fmt.Printf("收到: %s", msg.Payload)}

// 发布者(在另一个goroutine中)rdb.Publish(ctx, "mychannel", "Hello from Go!")


2.6 处理集群

clusterClient := redis.NewClusterClient(&redis.ClusterOptions{    Addrs: []string{        "localhost:7000",        "localhost:7001",        "localhost:7002",    },})

// 像普通客户端一样使用err := clusterClient.Set(ctx, "cluster_key", "value", 0).Err()if err != nil { panic(err)}


3. radix——轻量且快速

radix(github.com/mediocregopher/radix/v4)是一个极简客户端,抽象层次低。它没有依赖,在简单操作上比go-redis更快,并让您完全控制网络层。



3.1 安装

go get github.com/mediocregopher/radix/v4


3

推荐