手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
23517 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

存储相关配置项的艺术

你好,我是轩脉刃。
我们的日常 Web 业务开发大多数都属于 IO 密集型的业务,需要对业务数据进行存储、访问。在这个过程中,存储相关的组件(数据库和缓存)就是我们最经常打交道的平台服务了。
专栏第 25-27 章中,我们将 MySQL 和 Redis 这两个最常用的数据库和缓存基础设施融合到了 Hade 框架中。可在评论和讨论群中,大家问得最多的却是如何设置这些配置项。确实,掌握框架用法之后,大家最想知道的就是如何最优设置这些配置项,让框架性能达到最优。
配置项的设置是一门经验艺术。
我也想简简单单给你一个配置项,让你闭眼就能设置到最优。但我想说,并不存在什么统一的最优配置,不同的服务器环境、不同的业务,就会有不同的配置项设置。我们需要掌握的是配置项的思考方法论,即面对一个配置,能够明确需要考虑哪些因素。这需要你在不同的业务中摸爬滚打,才能总结思考出来。所以我才说“配置项的设置是一门经验艺术”。
这一章,就让我们一起来讨论存储相关配置项的设置。

Redis

在 Hade 框架中,我们集成了 github.com/go-redis/redis 库作为 Redis 的调用,它的配置项如下:
// Options 用于设置 Redis 连接的配置。
type Options struct {
// 网络类型,可以是 tcp 或 unix。
// 默认是 tcp。
Network string
// 主机:端口 地址。
Addr string
// Dialer 创建新的网络连接,优先级高于 Network 和 Addr 选项。
Dialer func(ctx context.Context, network, addr string) (net.Conn, error)
// 当新连接建立时调用的钩子函数。
OnConnect func(ctx context.Context, cn *Conn) error
// 使用指定的用户名来认证当前连接,
// 适用于 Redis 6.0 或更高版本,使用 Redis ACL 系统时。
Username string
// 可选的密码。必须与服务器配置选项 requirepass 指定的密码匹配
// (如果连接到 Redis 5.0 或更低版本),
// 或者与使用 Redis ACL 系统时的用户密码匹配(如果连接到 Redis 6.0 或更高版本)。
Password string
// 连接到服务器后选择的数据库。
DB int
// 在放弃之前的最大重试次数。
// 默认是重试 3 次;-1(不是 0)表示禁用重试。
MaxRetries int
// 每次重试之间的最小退避时间。
// 默认是 8 毫秒;-1 表示禁用退避。
MinRetryBackoff time.Duration
// 每次重试之间的最大退避时间。
// 默认是 512 毫秒;-1 表示禁用退避。
MaxRetryBackoff time.Duration
// 建立新连接的拨号超时时间。
// 默认是 5 秒。
DialTimeout time.Duration
// 套接字读取的超时时间。如果达到此时间,命令将失败并返回超时错误,而不是阻塞。
// 使用 -1 表示没有超时,0 表示使用默认值。
// 默认是 3 秒。
ReadTimeout time.Duration
// 套接字写入的超时时间。如果达到此时间,命令将失败并返回超时错误。
// 默认是 ReadTimeout。
WriteTimeout time.Duration
// 连接池的类型。
// true 表示 FIFO(先进先出)池,false 表示 LIFO(后进先出)池。
// 注意,FIFO 比 LIFO 有更高的开销。
PoolFIFO bool
// 最大套接字连接数。
// 默认是每个可用 CPU 10 个连接(由 runtime.GOMAXPROCS 报告)。
PoolSize int
// 最小空闲连接数,当建立新连接较慢时很有用。
MinIdleConns int
// 客户端在连接达到此年龄时将其关闭。
// 默认是不关闭老化的连接。
MaxConnAge time.Duration
// 如果所有连接都忙,客户端等待连接的时间,然后返回错误。
// 默认是 ReadTimeout + 1 秒。
PoolTimeout time.Duration
// 客户端关闭空闲连接的时间。
// 应小于服务器的超时时间。
// 默认是 5 分钟。-1 表示禁用空闲超时检查。
IdleTimeout time.Duration
// 空闲连接检查的频率。
// 默认是 1 分钟。-1 表示禁用空闲连接检查,
// 但如果设置了 IdleTimeout,客户端仍会丢弃空闲连接。
IdleCheckFrequency time.Duration
// 启用在从节点上进行只读查询。
ReadOnly bool
// 使用的 TLS 配置。如果设置了,将进行 TLS 协商。
TLSConfig *tls.Config
// 用于实现断路器或限流器的接口。
Limiter Limiter
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Redis的配置项需要根据服务器环境和业务需求进行个性化设置,重点关注网络连接、重试次数和超时设置等。 2. Dialer配置项可用于自定义连接方式,适用于特殊网络环境下的连接需求。 3. go-redis库会自动设置重试机制,提高业务可用性,通过递增的重试间隔时间来保证请求的成功。 4. 配置项的理解和设置需要结合实际业务需求和网络环境,以确保连接的稳定和可靠性。 5. MinIdleConns 和 MaxConnAge 是Redis连接池相关的常用配置项,需要根据实际情况进行调整。 6. 在高并发场景下,MySQL的连接相关和超时相关配置项需要根据业务需求和网络情况进行设置,特别是ReadTimeout的设置需要考虑用户可容忍时长。 7. 配置项的设置需要根据具体情况进行思考和调整,而非一刀切的最优设置。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部