Go语言使用Redigo操作Redis详解:安装、连接与封装

蓝鲸
蓝鲸
发布时间:2026-10-16| 9人浏览过
原创

本文介绍Go语言中使用Redigo库连接Redis的标准做法,包含带/无密码连接、集合操作(SADD)示例及单例模式封装技巧,帮助开发者快速搭建稳定的Redis访问层。

准备条件:安装Redigo

在Go生态中,redigo是广泛使用的Redis客户端库。在使用前,需要通过Go Modules或go get将其下载到项目中。建议使用最新维护的模块路径:

$ go get github.com/gomodule/redigo

真实操作顺序:建立连接与数据操作

第1步:配置环境并建立TCP连接

目的:确保Go程序能正确连接到指定的Redis实例。Redis通常监听在 127.0.0.1:6379。

参数说明:

  • Dial("tcp", host):指定通信协议。
  • DialPassword("pwd"):若Redis设置了密码,必须传入此选项。

场景A:带密码的连接(基础示例)

以下代码演示了如何初始化连接并使用 SADD 命令向集合添加元素。

package main
import (
    "log"
    "github.com/gomodule/redigo/redis"
)

func main() {
    server := "127.0.0.1:6379"
    // 配置密码认证选项
    option := redis.DialPassword("123456")
    
    c, err := redis.Dial("tcp", server, option)
    if err != nil {
        log.Println("connect server failed:", err)
        return
    }
    defer c.Close()

    // 执行 SADD 命令:向键 "myset" 添加成员 "10.8.37.98"
    v, err := redis.Int64(c.Do("SADD", "myset", "10.8.37.98"))
    if err != nil {
        log.Println("SADD failed:", err)
        return
    }
    log.Println("SADD added count:", v)
}

场景B:无密码的连接

对于开发环境或未开启验证的Redis,可直接连接:

package main
import (
	"fmt"
	"github.com/gomodule/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer c.Close()
	
	// 简单的 SET / GET 测试
	_, err = c.Do("SET", "hello", "world")
	if err != nil { log.Fatal(err) }
	
	s, err := redis.String(c.Do("GET", "hello"))
	fmt.Println(s)
}

第2步:批量添加集合成员 (SADD Batch)

当需要一次性向集合添加多个值时,可以构建 []interface{} 切片来传递参数。注意第一个参数永远是Key。

func batchAddSet() {
    server := "127.0.0.1:6379"
    option := redis.DialPassword("123456")
    c, err := redis.Dial("tcp", server, option)
    if err != nil {
        log.Println("Failed to connect", err)
        return
    }
    defer c.Close()

    setKey := "myset"
    // 构建参数列表: Key, Val1, Val2...
    args := []interface{}{setKey, "10.1", "10.2"}
    
    // 展开参数发送命令
    v, err := redis.Int64(c.Do("SADD", args...))
    if err != nil {
        log.Println("SADD failed:", err)
        return
    }
    log.Println("Batch added count:", v)
}

工程实践:Redis通用封装

在实际项目中,直接散乱地调用 redis.Dial 不利于管理。建议将连接逻辑封装为单例或全局对象,统一处理配置文件读取和错误日志。

封装要点:

  1. 定义全局 redis.Conn 变量(生产环境建议改用连接池 redis.Pool)。
  2. 通过配置文件获取 IP、端口和密码。
  3. 提供初始化和关闭接口。
package redis_helper

import (
	"fmt"
	"github.com/gomodule/redigo/redis"
	"log"
	// 假设这是项目内部的配置工具
	"autumn/tools/cfg" 
)

var REDIS redis.Conn

// InitRedis 负责在程序启动时建立连接
func InitRedis() {
	REDIS = redis_connect("default")
}

// CloseRedis 释放资源
func CloseRedis() {
	if REDIS != nil {
		REDIS.Close()
	}
}

func redis_connect(project string) redis.Conn {
	// 从配置中心读取连接信息
	server := fmt.Sprintf("%s:%s",
		cfg.Get("redis", project+".host").String(),
		cfg.Get("redis", project+".port").String())
	
	var err error
	// 读取密码,若为空字符串则表示无密码
	passwd := cfg.Get("redis", project+".passwd").String()
	option := redis.DialPassword(passwd)
	
	c, err := redis.Dial("tcp", server, option)
	if err != nil {
		log.Fatalf("[GIN-Redis(%s)] connect to redis error: %v", project, err)
	}
	log.Printf("[GIN-Redis(%s)] connected success", project)
	return c
}

完成判断

检查日志中是否输出 [GIN-Redis(default)] connected success,且后续执行 SADD 或 SET 时未报错,即表示封装生效。

简要总结

以上就是Go语言使用Redigo连接和操作Redis的详细指南,涵盖了从基础安装到工程化封装的全流程。更多关于Go语言中间件优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。