当前位置: 首页 > news >正文

Go 应用中的 Redis 连接与操作

安装与模块初始化

  1. 初始化 Go 模块

    go mod init github.com/yourusername/yourrepo
    
  2. 获取 go-redis
    go-redis v9 支持最新两个 Go 版本:

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

建立连接

1. 最简方式

import ("context""fmt""github.com/redis/go-redis/v9"
)func main() {ctx := context.Background()client := redis.NewClient(&redis.Options{Addr:     "localhost:6379",Password: "", // 若设置了密码则填入DB:       0,  // 默认使用 DB0Protocol: 2,  // Redis 协议版本(通常无须修改)})// 测试连通性err := client.Ping(ctx).Err()if err != nil {panic(err)}fmt.Println("✅ Redis connected")
}

2. 使用连接字符串

opt, err := redis.ParseURL("redis://user:pass@localhost:6379/1")
if err != nil {panic(err)
}
client := redis.NewClient(opt)

基本读写示例

字符串操作

// 设置 key
if err := client.Set(ctx, "foo", "bar", 0).Err(); err != nil {panic(err)
}// 获取 key
val, err := client.Get(ctx, "foo").Result()
if err != nil {panic(err)
}
fmt.Println("foo =", val) // foo = bar

哈希操作

fields := []string{"model", "Deimos","brand", "Ergonom","type",  "Enduro bikes","price", "4972",
}// HSET
if n, err := client.HSet(ctx, "bike:1", fields...).Result(); err != nil {panic(err)
} else {fmt.Printf("↪ %d fields set\n", n) // ↪ 4 fields set
}// HGET
model, _ := client.HGet(ctx, "bike:1", "model").Result()
price, _ := client.HGet(ctx, "bike:1", "price").Result()
fmt.Println("model:", model, "price:", price)// HGETALL 并 Scan 到结构体
type BikeInfo struct {Model string `redis:"model"`Brand string `redis:"brand"`Type  string `redis:"type"`Price int    `redis:"price"`
}var info BikeInfo
if err := client.HGetAll(ctx, "bike:1").Scan(&info); err != nil {panic(err)
}
fmt.Printf("%+v\n", info)
// 输出:{Model:Deimos Brand:Ergonom Type:Enduro bikes Price:4972}

管道与事务(Pipelines & Transactions)

管道示例

管道(Pipeline)可将多条命令一次性发送并批量接收结果,减少网络往返:

pipe := client.Pipeline()
incr := pipe.Incr(ctx, "pipeline_counter")
pipe.Expire(ctx, "pipeline_counter", time.Hour)
results, err := pipe.Exec(ctx)
if err != nil {panic(err)
}
fmt.Println("New counter:", incr.Val(), "Results:", results)

事务示例

事务(TXPipelined)可在乐观锁或 MULTI/EXEC 模式下执行:

err := client.Watch(ctx, func(tx *redis.Tx) error {n, err := tx.Get(ctx, "key").Int()if err != nil && err != redis.Nil {return err}_, err = tx.TxPipelined(ctx, func(pipe redis.Pipeliner) error {pipe.Set(ctx, "key", n+1, 0)return nil})return err
}, "key")
if err != nil {panic(err)
}

OpenTelemetry 可观测性

在生产环境中,监控 Redis 命令性能与分布式追踪至关重要。go-redis 提供了 redisotel 插件:

import ("github.com/redis/go-redis/v9""github.com/redis/go-redis/extra/redisotel/v9"
)client := redis.NewClient(&redis.Options{ /* ... */ })// 启用追踪
if err := redisotel.InstrumentTracing(client); err != nil {panic(err)
}// 启用指标
if err := redisotel.InstrumentMetrics(client); err != nil {panic(err)
}

完成后,你的 Redis 操作将自动生成 OpenTelemetry spans 和 metrics,可接入 Jaeger、Prometheus 等后端。


生产环境最佳实践

  1. 连接池调优

    • Options.PoolSizeMinIdleConnsPoolTimeout 等参数根据业务并发场景调整。
  2. 重试与断路器

    • 对关键写操作,启用 Options.MaxRetries,并结合 github.com/sethvargo/go-retry 实现限流、退避重试。
  3. 心跳检测

    • 定期执行 PING 或自定义 Lua 脚本,检测集群节点健康。
  4. 安全加固

    • 开启 ACL、TLS 加密,避免明文传输和未授权访问。
  5. 监控与告警

    • 利用 redisotel、Redis 内置 INFO 命令及 redis_exporter 打通 Prometheus → Alertmanager → PagerDuty 告警链路。

更多资源

  • 🔗 go-redis 官方文档:https://pkg.go.dev/github.com/redis/go-redis/v9
  • 🔗 GitHub 仓库:https://github.com/redis/go-redis
  • 🔗 OpenTelemetry 支持示例:extra/redisotel/v9

通过以上内容,你已掌握使用 go-redis 在 Go 应用中进行基础操作、结构体映射、可观测集成与生产环境优化的核心要点。Happy coding!

相关文章:

  • chrome浏览器地址栏输入查询无效
  • c#,vb.net使用OleDb写入Excel异常:字段太小而不能接受所要添加的数据的数量
  • 【无标题】C++单例模式详解
  • CentOS 7 下 Redis 从 5.0 升级至 7.4.3 全流程实践
  • 人工智能模型方面有哪些优化措施,可以提升模型的准确率
  • 嵌入式开发--STM32G431无法正常运行程序,BOOT0与CAN冲突
  • 第五十五节:综合项目实践-实时人脸美化滤镜
  • (独家)SAP WIP生产订单结算报错:没有估算额;不可能结算
  • lto.o
  • 78. Subsets和90. Subsets II
  • Claude 4对比Claude 3.7全面评测:2025最新AI模型实测对比
  • Femap许可证与网络安全策略
  • APP广告变现,开发者如何判断对接的广告SDK安全合规?
  • 注意力机制模块代码
  • windows中Redis、MySQL 和 Elasticsearch启动并正确监听指定端口
  • 实时数仓flick+clickhouse启动命令
  • 聊一聊 .NET Dump 中的 Linux信号机制
  • Spark SQL进阶:解锁大数据处理的新姿势
  • 编程规范Summary
  • C++ STL stack容器使用详解
  • 怎么在记事本上做网站/竞价外包推广专业公司
  • 做.net网站流程/网站搭建教程
  • 有什么好的互联网平台做网站/百度小说搜索热度排行榜
  • 山东鲁桥建设有限公司网站/品牌运营公司
  • 日本女做受网站/吴忠seo
  • 网络推广公司北京/上海seo优化公司 kinglink