如何用limit_req_zone和$binary_remote_addr节省50%内存空间?

2026-04-29 02:060阅读0评论SEO资讯
  • 内容介绍
  • 相关推荐

本文共计748个文字,预计阅读时间需要3分钟。

如何用limit_req_zone和$binary_remote_addr节省50%内存空间?

直接使用 `$binary_remote_addr` 替代 `$remote_addr` 作为 `limit_req_zone` 的 key,可以在共享内存中节省超过 50% 的空间——这不是优化技巧,而是 Nginx 底层数据存储机制决定的固有优势。

为什么 $binary_remote_addr 更省内存

Nginx 的限流状态(每个客户端的计数、时间戳、哈希指针等)都存在共享内存 zone 中。真正吃内存的,是 key 字段本身:

  • $remote_addr 是字符串,IPv4 如 "192.168.1.1" 占 11 字节,IPv6 如 "2001:db8::1" 最长可达 39 字节;Nginx 需按最大长度预留缓冲 + 字符串管理开销
  • $binary_remote_addr 是二进制值:IPv4 固定 4 字节,IPv6 固定 16 字节;无编码、无终止符、无动态分配,直接 memcpy 到哈希节点
  • 实测单个 key 在 IPv4 环境下,从平均 32–40 字节降至约 12–16 字节(含结构体头),综合节省超 50%

真实内存占用怎么算

别再信“1MB ≈ 1 万个 IP”这种粗略估算。

阅读全文

本文共计748个文字,预计阅读时间需要3分钟。

如何用limit_req_zone和$binary_remote_addr节省50%内存空间?

直接使用 `$binary_remote_addr` 替代 `$remote_addr` 作为 `limit_req_zone` 的 key,可以在共享内存中节省超过 50% 的空间——这不是优化技巧,而是 Nginx 底层数据存储机制决定的固有优势。

为什么 $binary_remote_addr 更省内存

Nginx 的限流状态(每个客户端的计数、时间戳、哈希指针等)都存在共享内存 zone 中。真正吃内存的,是 key 字段本身:

  • $remote_addr 是字符串,IPv4 如 "192.168.1.1" 占 11 字节,IPv6 如 "2001:db8::1" 最长可达 39 字节;Nginx 需按最大长度预留缓冲 + 字符串管理开销
  • $binary_remote_addr 是二进制值:IPv4 固定 4 字节,IPv6 固定 16 字节;无编码、无终止符、无动态分配,直接 memcpy 到哈希节点
  • 实测单个 key 在 IPv4 环境下,从平均 32–40 字节降至约 12–16 字节(含结构体头),综合节省超 50%

真实内存占用怎么算

别再信“1MB ≈ 1 万个 IP”这种粗略估算。

阅读全文