谷歌浏览器 开启 Disable cache 还是会显示 Provisional headers are shown --- * 将短时间内发往 Redis 的多个查询请求(可能是相同 key 或不同 key)合并成一个批量查询。 * 在应用层使用 Goroutine 或其他协程机制等待查询结果。 * 一次性从 Redis 获取多个 key 的数据后,将结果分发回每个请求。 - https://hankmo.com/posts/golang/go-singleflight/ - https://www.cyningsun.com/03-31-2019/live-streaming-danmaku.html - https://www.cyningsun.com/01-11-2021/golang-concurrency-singleflight.html "golang.org/x/sync/singleflight --- csdn --- keep-alive --- -- --- --- --- --- --- --- > # ------------------------- > 相关阅读 - https://www.cnblogs.com/reim/p/17377883.html ### **内存紧凑性** * **整型集合(`intset`)的核心特点**是存储紧凑,节省内存: * 整型集合采用连续内存存储,每个元素的大小为 2、4 或 8 字节,具体取决于集合中最大整数的位宽(16 位、32 位或 64 位)。 * Redis 动态调整编码类型(如从 `int16_t` 升级到 `int32_t`)以最小化内存占用。 * **浮点型集合的内存开销更大**: 如果数据范围和精度可以确定,使用定点数存储会更高效。例如,将浮点数放大 1000 倍后用整数存储(`int` 类型),节省空间 * 浮点数(如 `double`)的存储占用固定 8 字节,即使数值较小也无法优化。 * 对于典型的 Redis 集合场景(如用户 ID 集合、去重计数),浮点型集合会浪费不必要的内存。 除了 **Gzip**,当前流行的压缩方式还有以下几种,根据场景和需求的不同,它们在性能、压缩比、解压速度等方面表现优异: * * * ### **1\. Brotli** * **特点**: * 相比 Gzip,**压缩比更高**,尤其适合静态资源(如 HTML、CSS、JavaScript)。 * **解压速度快**,适用于 Web 资源的传输。 * **应用场景**: * 常用于 HTTP 压缩,特别是在 HTTPS 和 Web 浏览器之间传输静态资源。 * **支持度**: * 主流浏览器(Chrome、Firefox、Edge 等)支持 Brotli 压缩。 * Nginx、Apache 等服务器支持 Brotli 模块。 * * * ### **2\. Zstandard (zstd)** * **特点**: * **压缩和解压速度非常快**,同时具备较高的压缩比。 * 支持多线程压缩和解压,适合大文件的处理。 * **应用场景**: * 大型文件的压缩,如数据库备份、日志文件、数据归档。 * 游戏行业的数据传输(如 Steam 使用 zstd)。 * **优势**: * 灵活性高,可调整压缩级别以适应性能和压缩比需求。 * * * ### **3\. LZ4** * **特点**: * **极快的压缩和解压速度**,但压缩比低于 Gzip 和 Brotli。 * 面向实时性要求高的场景。 * **应用场景**: * 数据库的内部压缩。 * 流式日志压缩和传输(如 Kafka 支持 LZ4)。 * **优势**: * 解压性能优异,非常适合需要频繁解压的小型数据块。 * * * ### **4\. Snappy** * **特点**: * **快速压缩和解压**,压缩比适中。 * 主要目标是**低延迟**。 * **应用场景**: * 分布式系统中的数据传输(如 Hadoop、Cassandra、Kafka)。 * 大量小文件或实时数据处理场景。 * **优势**: * Google 开发,兼容性强,适用于分布式存储和流式数据。 * * * ### **5\. Bzip2 和 Xz** * **Bzip2**: * **特点**: 较高的压缩比,但压缩速度较慢。 * **应用场景**: 数据归档、日志备份(较少用于实时数据处理)。 * **Xz**: * **特点**: 提供更高的压缩比,比 Bzip2 更快,适合归档大文件。 * **应用场景**: 数据归档(如 Linux 的软件包使用)。 * * * ### **对比总结** | 压缩算法 | 优势 | 劣势 | 适用场景 | | --- | --- | --- | --- | | **Gzip** | 兼容性强,速度快 | 压缩比不如 Brotli | 通用 HTTP 压缩,实时场景 | | **Brotli** | 高压缩比,浏览器支持好 | 压缩速度较慢 | 静态资源压缩(HTML/CSS/JS) | | **Zstd** | 快速,灵活性高 | 依赖库支持 | 数据库备份,游戏数据压缩 | | **LZ4** | 压缩解压极快 | 压缩比低 | 日志压缩,实时流式数据处理 | | **Snappy** | 低延迟 | 压缩比不高 | 分布式系统,流式传输 | | **Bzip2** | 高压缩比 | 压缩速度慢 | 历史归档数据 | | **Xz** | 压缩比高 | 速度稍慢 | 大文件归档 | * * * ### **趋势** * **Brotli 和 Zstd** 是目前最流行的压缩方式: * Brotli 是 Web 前端和传输层的首选。 * Zstd 则是服务器端数据存储和实时数据压缩的热门选择。 * 对于实时性要求高的场景,**LZ4** 和 **Snappy** 仍是重要选择。 --- | 方法 | 格式 | 序列化速度 | 反序列化速度 | 数据大小 | 适用场景 | | --- | --- | --- | --- | --- | --- | | **`encoding/json`** | 文本 | 慢 | 慢 | 大 | 通用、跨语言兼容 | | **`json-iterator`** | 文本 | 较快 | 较快 | 大 | 高性能 JSON 场景 | | **`msgpack`** | 二进制 | 快 | 快 | 小 | 高效传输、跨语言兼容 | | **`gob`** | 二进制 | 快 | 快 | 小 | Go 内部数据通信 |