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

golang如何使用go-redis客户端_golang go-redis客户端使用教程

初始化 RDB 客户端需正确设置 Addr(Docker 中用 host.docker.internal 或宿主 IP)、显式调用 Ping 校验连接、Password 和 Username(ACL)不遗漏、使用带超时的 context;Set 过期时间必须为 time.Duration 类型;哨兵模式须用 NewFailoverClient 并配对 MasterName 与 SentinelAddrs;连接池参数需按压测调优,并强制健康检查。怎么初始化 rdb 客户端才不会连不上本地开发连不上 Redis,八成是 Addr 配错了或没启服务。默认地址 "localhost:6379" 看似简单,但 Docker 里跑 Go 程序时,localhost 指的是容器自己,不是宿主机;得换成 "host.docker.internal:6379"(Mac/Win)或宿主真实 IP(Linux)。另外,redis.NewClient 不会立即建连,只是配置好参数,真正校验要靠 rdb.Ping(ctx).Result() —— 这一步必须做,否则后续操作失败时错误堆栈里根本看不出是连接问题。Addr 必须带端口,写成 "127.0.0.1:6379" 比 "localhost:6379" 更稳(避免 DNS 解析干扰)密码非空时,Password 字段不能漏,且不能多加空格;Redis 6+ ACL 用户需用 Username 字段显式指定别省略 ctx:用 context.Background() 可以,但生产环境建议传带超时的 context,比如 context.WithTimeout(ctx, 5*time.Second)rdb.Set 和 rdb.Get 的过期时间参数到底填什么rdb.Set(ctx, key, value, expiration) 第四个参数是 time.Duration,不是秒数也不是字符串。填 0 表示永不过期;填 time.Minute 或 5 * time.Second 才生效;填 60 是错的 —— 它会被当成纳秒,实际过期时间几乎为零。常见误写:rdb.Set(ctx, "k", "v", 3600) → 实际设了 3600 纳秒过期,等同于立刻失效正确写法:rdb.Set(ctx, "k", "v", 1*time.Hour) 或 rdb.Set(ctx, "k", "v", time.Duration(3600)*time.Second)rdb.Get 返回 redis.Nil 错误表示 key 不存在,不是常规 error,要用 if err == redis.Nil 判断,别直接 panic(err)为什么哨兵模式下换主后请求还发到旧地址用 NewClient(&Options{Addr: "10.0.1.10:6379"}) 直连某个 Redis 实例,哪怕配了哨兵,go-redis 也完全不知道哨兵存在 —— 它只会死磕这个地址。真要支持自动故障转移,必须用 redis.NewFailoverClient,且 MasterName 必须和哨兵配置中 sentinel monitor mymaster 的名字**完全一致(大小写敏感)**,SentinelAddrs 填的是哨兵节点地址(如 "10.0.1.10:26379"),不是 Redis 实例地址。错误示范:把 SentinelAddrs 写成 Redis 主节点地址,或只填一个哨兵节点(单点失效风险)推荐写法:SentinelAddrs: []string{"10.0.1.10:26379", "10.0.1.11:26379", "10.0.1.12:26379"}连接成功后,可调 rdb.Info(ctx, "replication").Result() 看当前角色,验证是否真的连上了新主并发高时为啥总卡在 rdb.Get 上默认连接池大小是 CPU 核数 × 10,看着大,但若每个请求都新建 context 且不设超时,或 Redis 响应慢,连接池会迅速耗尽,后续请求就在 PoolTimeout 里排队。这不是代码写错了,是连接池参数没按压测结果调优。 Vozo Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

http://www.jsqmd.com/news/641475/

相关文章:

  • 动手学深度学习——束搜索
  • 如何自定义Apache Thrift代码模板:掌握高效代码生成的终极指南
  • 别再死记硬背SOP表了!手把手教你用Python模拟BMS的查表功率估算(附代码)
  • CPU-X核心功能详解:从CPU到显卡的全面硬件信息收集
  • uview-plus Picker组件实战:动态加载省市区数据的联动技巧
  • 10分钟掌握 Angular Schema Form:JSON Schema 到表单的完整转换教程
  • 2024年软考架构设计师通关秘籍:从八大架构到实战解析
  • DevOps自动化与持续交付:从理论到实践
  • 基于VS+Qt的工业相机SDK集成与多线程图像处理实战
  • 【原创】IgH EtherCAT主站详解(7)--Device网卡、EEPROM(SII)和EoE模块介绍
  • 利用 iptables 构建精细化 SSH 访问控制策略:从基础规则到高级防护
  • WAN2.2中文提示词写作指南:3个原则让你的视频生成更精准
  • Tox完全指南:10分钟快速掌握Python测试自动化神器
  • 【倒计时72小时】奇点大会未发布功能抢先看:支持214种方言实时映射的轻量化多模态翻译边缘端SDK(含ARMv9优化清单)
  • Fusuma入门教程:5分钟搭建专业级iOS相册应用
  • Claude 命令行实战:解锁终端高效开发的秘密武器
  • OneinStack多PHP版本管理:如何在同一个服务器上运行多个PHP应用
  • 【Nginx进程管理】
  • DDD分层架构实战:从理论到落地的关键设计
  • Wan2.1 VAE系统重装后恢复指南:快速迁移模型与数据
  • cursor全局skills放置的目录
  • 【MQTT】利用阿里云物联网平台构建设备间双向通信的实战指南
  • 移动应用安全防护策略:从理论到实践
  • cpp中快速幂模板
  • ICLR 2026 | 中国联通提出扩散模型缓存框架MeanCache,刷新多模态生成模型推理加速新基准
  • Phi-4-mini-reasoning推理能力深度解析:合成数据训练带来的逻辑跃迁
  • GridDB集群管理实战:构建高可用分布式数据库架构
  • Down源码解析:从cmark到Swift的完整技术架构
  • 全文降AI的好处和操作流程:从上传到下载全程教学
  • 如何快速实现Foundry日志输出重定向:保存调试信息的完整指南