news 2026/7/15 12:48:03

database.FindBeanRedisDb().RPush 这个会超时吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
database.FindBeanRedisDb().RPush 这个会超时吗?

database.FindBeanRedisDb().RPush目前没有设置超时时间,这意味着在某些情况下可能会出现阻塞问题。

当前 Redis 客户端配置

查看beconfig/config.godatabase/redis_db.go

Go

17
// RedisConfig 结构体(beconfig/config.go:55) type RedisConfig struct { Enable bool `yaml:"enable"` Host string `yaml:"host"` Port int `yaml:"port"` Password string `yaml:"password"` DB int `yaml:"db"` // 缺少超时配置! } // NewRedisClient 初始化(database/redis_db.go:44) rdb := redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%d", conf.Host, conf.Port), Password: conf.Password, DB: conf.DB, // 没有设置任何超时参数! })

潜在问题

场景行为风险
Redis 服务器宕机RPush 会无限阻塞等待响应导致 goroutine 泄漏,服务卡死
网络超时/中断同样会无限阻塞同上
连接池耗尽获取连接时无限阻塞服务不可用

建议的改进方案

1. 更新配置结构

Go

type RedisConfig struct { Enable bool `yaml:"enable"` Host string `yaml:"host"` Port int `yaml:"port"` Password string `yaml:"password"` DB int `yaml:"db"` DialTimeout time.Duration `yaml:"dialTimeout"` // 连接建立超时 ReadTimeout time.Duration `yaml:"readTimeout"` // 读操作超时 WriteTimeout time.Duration `yaml:"writeTimeout"` // 写操作超时 PoolTimeout time.Duration `yaml:"poolTimeout"` // 连接池获取超时 }

2. 更新客户端初始化

Go

func NewRedisClient(conf *beconfig.RedisConfig) (*RedisDb, error) { if !conf.Enable { logrus.Info("redis disable") return &RedisDb{}, nil } // 设置默认超时时间 dialTimeout := conf.DialTimeout if dialTimeout == 0 { dialTimeout = 5 * time.Second } readTimeout := conf.ReadTimeout if readTimeout == 0 { readTimeout = 3 * time.Second } writeTimeout := conf.WriteTimeout if writeTimeout == 0 { writeTimeout = 3 * time.Second } poolTimeout := conf.PoolTimeout if poolTimeout == 0 { poolTimeout = 2 * time.Second } rdb := redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%d", conf.Host, conf.Port), Password: conf.Password, DB: conf.DB, DialTimeout: dialTimeout, ReadTimeout: readTimeout, WriteTimeout: writeTimeout, PoolTimeout: poolTimeout, }) // ... }

总结

当前代码存在风险RPush没有超时保护,如果 Redis 服务器不可用或网络异常,调用会无限阻塞。建议立即添加超时配置来避免服务稳定性问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 12:45:38

正则即代码,生成即责任:ChatGPT输出必须携带3层可信签名——语法树校验、Fuzz测试覆盖率、最小DFA等价性证明(附开源验证工具链)

更多请点击: https://codechina.net 第一章:正则即代码,生成即责任:ChatGPT输出必须携带3层可信签名——语法树校验、Fuzz测试覆盖率、最小DFA等价性证明(附开源验证工具链) 正则表达式在现代软件工程中早…

作者头像 李华
网站建设 2026/7/15 12:45:25

Topit:macOS窗口置顶终极指南,让你的多任务效率提升300%

Topit:macOS窗口置顶终极指南,让你的多任务效率提升300% 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否经常在macOS上工作时&…

作者头像 李华
网站建设 2026/7/15 12:45:20

PixiJS高性能渲染实战:小程序游戏开发三步走与性能优化指南

1. 项目概述最近几年,小程序游戏的热度一直居高不下,从营销活动到轻量级休闲游戏,它几乎成了触达用户最直接的渠道之一。但很多开发者,尤其是从Web前端转过来的朋友,一上手就发现不对劲:在小程序里做游戏&a…

作者头像 李华
网站建设 2026/7/15 12:45:08

DLP230KP微镜芯片:720P投影核心的硬件设计与系统集成指南

1. 项目概述:DLP230KP,一个为极致便携而生的高清显示核心如果你拆开过一台市面上主流的超便携式投影仪,或者某些具备投影功能的智能音箱、概念手机,你很可能会在它的光学引擎最核心的位置,发现一块比指甲盖大不了多少的…

作者头像 李华
网站建设 2026/7/15 12:44:01

Bangumi追番神器:如何用开源工具打造你的二次元生活管理平台

Bangumi追番神器:如何用开源工具打造你的二次元生活管理平台 【免费下载链接】Bangumi :electron: An unofficial https://bgm.tv ui first app client for Android and iOS, built with React Native. 一个无广告、以爱好为驱动、不以盈利为目的、专门做 ACG 的类似…

作者头像 李华