LZ4:用极高速压缩与解压服务 C/C++ 数据流
一个给 C/C++ 和命令行用的无损压缩库,LZ4 解压接近内存速度,优先速度而非最高压缩比。
GitHub lz4/lz4 更新 2026-11-06 分支 dev 星标 12.4K 分叉 1.6K
C C++ 无损压缩 lz4 CLI Linux Makefile

🧭 决策指南

适合,如果你

  • 你需要 C/C++ 中超过 500 MB/s 的单核压缩速度
    README 的 LZ4 - Extremely fast compression 章节写明 compression speed > 500 MB/s per core
  • 你的系统更看重解压吞吐,目标接近 4950 MB/s
    README 的 Benchmarks 表中 LZ4 default v1.11.0 的 Decompression 为 4950 MB/s
  • 你需要处理任意长度文件或数据流
    README 的 Documentation 章节说明 arbitrarily long files or data streams 使用多个 block,并组织成 frame
  • 小文件需要字典压缩且愿意使用 -D 或 lz4frame.h
    README 的 LZ4 正文说明 dictionary compression 同时支持 API 和 CLI(-D)

不适合,如果你

  • 你的首要目标是默认压缩比高于 LZ4 的 2.112
    README 的 Benchmarks 表显示 Zstandard 1.5.7 -1 为 2.896,而 LZ4 default 为 2.112
  • 你只能接受 GPL-2.0-or-later 之外的 CLI 许可证
    README 明确说明 lz4 command line utility 使用 GPL-2.0-or-later
  • 你的部署环境不能处理 make install 的 root permissions 要求
    README 的 Installation 章节注明 make install may require root permissions

前置条件

  • README 的 Installation 章节提供 make 和 make install;其中 make install 可能需要 root permissions。
  • 项目使用 Makefile 构建,并支持 parallel builds(-j#)。
  • 需要 C/C++ 集成时,README 提供 lz4.h、lz4hc.h 和 lz4frame.h 头文件 API。

第一步命令(README 原文)

make

要注意

  • 选择 LZ4_HC -9 会把压缩速度降到 40 MB/s。
    README 的 Benchmarks 表中 LZ4 HC -9 v1.11.0 的 Compression 为 40 MB/s
  • CLI 与库的许可证不同,不能把 BSD 2-Clause 直接套用于 lz4 命令。
    README 的 LZ4 正文分别说明 library 使用 BSD 2-Clause、lz4 command line utility 使用 GPL-2.0-or-later
  • 字典输入可以是任意文件,但实际只使用最后 64 KB。
    README 的 LZ4 正文明确写明 only the final 64 KB are used
  • 互操作实现需要遵守 lz4_Frame_format,而非只处理 raw block。
    README 的 Documentation 章节说明 interoperable versions of LZ4 must respect the frame format

替代方案

  • Zstandard 1.5.7:基准中 Zstandard 1.5.7 -1 的压缩比为 2.896,高于 LZ4 default 的 2.112;更看重压缩比时更合适。
    README 的 Benchmarks 章节
  • zlib 1.3.2:需要 zlib deflate 格式或更高压缩比时,README 基准中 zlib deflate 1.3.2 -6 达到 3.106。
    README 的 Benchmarks 章节

材料未说明

  • README 未说明支持的操作系统版本范围及 Windows、macOS 的具体构建要求。
  • README 未给出 LZ4_HC 的 API 参数、内存占用或线程安全说明。
  • README 未说明 v1.11.0 的发布日期、变更内容与当前 Trending 增长之间的因果关系。
  • 项目元数据将许可协议标为 Other,README 则分别列出 BSD 2-Clause 与 GPL-2.0-or-later,需进一步核对发布文件中的许可证边界。

💡 深度解析

6
不适合 我需要在多个 C/C++ 进程之间传输任意长度的数据流,并让不同实现遵守同一格式;仅使用 LZ4 的 block API 是否足够,还是应该使用 frame API?
适合读者: 维护跨机器数据流和长文件传输的 C/C++ 工程师,需要可互操作的格式、多个数据块和完整流边界,而不是只压缩单个内存块

不适合只使用 block API;你的跨进程长流场景应优先采用 frame API。

  • README 将 block format 与 frame format 分开说明,并指出任意长度文件或数据流要通过多个 block 压缩。
  • 这些 block 会被组织进 frame,frame 负责流式数据的格式组织。
  • README 明确要求可互操作的 LZ4 实现遵守 frame format,这直接对应跨进程、跨机器互操作约束。
  • API 文档分别对应 lz4.h 的 block API 和 lz4frame.h 的 frame API。

block API 仍适合已有协议已经管理块边界的内存场景,但 README 没有说明你的传输协议是否提供长度、校验、截断检测或字典标识,因此不能据此判断裸 block 是否安全。

  • README「Documentation」:"Arbitrarily long files or data streams are compressed using multiple blocks"
  • README「Documentation」:"These blocks are organized into a frame"
  • README「Documentation」:"Interoperable versions of LZ4 must also respect the frame format"
  • README「Documentation」:"[lz4.h] (block API)"、"[lz4frame.h] (frame API)"
make
材料未说明:README 没有说明你的传输协议是否已经定义长度、校验和、错误恢复或截断检测。;README 没有说明目标语言实现是否完整支持同一 frame 版本和可选元数据。
视情况 我想把 LZ4 C 库嵌入闭源产品,并随产品提供 `lz4` 命令行工具;README 中 BSD 2-Clause 库许可证和 GPL-2.0-or-later CLI 许可证的差异,会不会改变这个集成方案?
适合读者: 将压缩能力嵌入闭源 C 产品、同时需要随产品分发 lz4 命令行工具的发行工程师,必须区分库许可证与 CLI 许可证

视情况:嵌入 BSD 2-Clause 库通常与闭源产品的集成边界不同于随产品分发 GPL-2.0-or-later 的 CLI,不能把两者当成同一许可对象。

  • README 明确说明 LZ4 library 使用 BSD 2-Clause license。
  • 同一段落明确说明 lz4 command line utility 使用 GPL-2.0-or-later license。
  • 项目数据将许可证标记为 Other,说明仅看项目元数据不足以替代 README 中对库和 CLI 的区分。
  • README 的 Packaging status 说多数发行版会同时打包 liblz4 library 和 lz4 CLI,实际分发时仍需分别处理它们。

如果只嵌入库,方案与同时分发 CLI 的合规边界不同;但 README 没有解释静态链接、动态链接、修改 CLI、组合分发和源代码提供义务,因此不能仅凭该页面作最终法律判断。

  • README「LZ4 - Extremely fast compression」:"The LZ4 library is provided as open-source software using the BSD 2-Clause license"
  • README「LZ4 - Extremely fast compression」:"The `lz4` command line utility is provided under the GPL-2.0-or-later license"
  • README「Packaging status」:"Most distributions are bundled with a package manager"
  • 项目数据:license 为 Other
材料未说明:README 没有说明静态链接与动态链接的具体合规影响。;README 没有说明修改 CLI 后的分发要求、组合分发义务或适用于闭源产品的源代码提供流程。
适合 我在 Linux 64 位服务器上用 C 实现缓存写入和读取路径,单核需要超过 500 MB/s 的压缩速度,并且读取端不能承担明显解压延迟;LZ4 是否适合?
适合读者: 在 Linux 64 位服务器上用 C 构建缓存和数据管道、要求单核压缩吞吐超过 500 MB/s 且读取延迟尽量接近内存速度的基础设施工程师

适合,因为 LZ4 的设计目标正是高吞吐压缩和极快解压。

  • README 声称每核心压缩速度超过 500 MB/s,单核基准中默认模式达到 770 MB/s。
  • 同一基准的解压速度为 4950 MB/s,README 说明多核下通常会受到内存速度限制。
  • 默认模式支持通过 acceleration 动态牺牲压缩率换取更快压缩,适合缓存写入压力变化的路径。
  • 项目提供 C 库、block API 和 frame API,可覆盖内存块及持续数据流。

需要注意,实际端到端吞吐仍可能受内存带宽、数据拷贝和下游处理速度影响;README 没有给出你的缓存数据分布或并发模型。

  • README「LZ4 - Extremely fast compression」:"compression speed > 500 MB/s per core"
  • README「Benchmarks」:"LZ4 default (v1.11.0) ... 770 MB/s ... 4950 MB/s"
  • README「LZ4 - Extremely fast compression」:"Compression speed can be tuned dynamically"
  • README「Documentation」:"The library API is documented in its headers"
make
材料未说明:README 没有说明目标缓存数据的可压缩率、块大小、内存带宽或并发线程数。;README 基准使用 Core i7-9700K、GCC v13.3.0、Ubuntu 24.04 和 Silesia Corpus,不代表目标硬件性能。
适合 我在 C/C++ 的离线备份流程中不要求实时写入,能接受 LZ4 HC -9 约 40 MB/s 的压缩速度;如果读取端仍要保持多 GB/s 级别解压,LZ4_HC 是否适合?
适合读者: 负责离线备份和发布包的 C/C++ 存储工程师,压缩写入速度可以降到约 40 MB/s,但希望比默认 LZ4 获得更高压缩率,同时保持高速读取

适合,但前提是备份写入不是实时瓶颈;LZ4_HC 把额外 CPU 成本集中在压缩端。

  • README 明确说明 LZ4_HC 以 CPU 时间换取更高压缩率,所有版本仍具有相同的解压速度。
  • 基准中 LZ4 HC -9 的压缩速度约为 40 MB/s,压缩因子为 2.717,高于默认模式的 2.112。
  • LZ4 HC -9 的解压速度仍为 4800 MB/s,接近默认模式的 4950 MB/s。
  • 高压缩 API 位于 lz4hc.h,因此可以在 C/C++ 备份组件中直接集成。

它不适合对写入延迟极敏感的在线路径。README 未说明备份数据实际可压缩率、磁盘吞吐和 LZ4_HC 其他等级的资源曲线。

  • README「LZ4 - Extremely fast compression」:"LZ4_HC ... trading CPU time for improved compression ratio"
  • README「Benchmarks」:"LZ4 HC -9 (v1.11.0) ... 40 MB/s ... 4800 MB/s"
  • README「Benchmarks」:"LZ4 default (v1.11.0) ... 2.112 ... 770 MB/s ... 4950 MB/s"
  • README「Documentation」:"[lz4hc.h] (high compression)"
make
材料未说明:README 没有说明 LZ4_HC -9 在目标备份数据上的实际压缩率和峰值内存占用。;README 没有说明备份任务是否支持离线排队,也没有给出其他 HC 等级的速度与压缩率。
适合 我需要把 C 库同时接入 Linux 的 Make、Windows 的 Visual Studio,以及使用 CMake、Meson 和 vcpkg 的工程;LZ4 的构建和安装方式是否覆盖这些约束?
适合读者: 需要在 Linux、Windows 和 Visual Studio 工程中分发 C 库的跨平台组件维护者,团队同时使用 Make、CMake、Meson 和 vcpkg

适合,README 明确列出了这些构建路径,但仍需核对目标发行版和 ABI 要求。

  • 项目的核心实现语言是 C,README 提供 Make 安装流程,并说明 Makefile 支持并行构建、分阶段安装和标准变量约定。
  • README 明确提供 CMake、Meson 和 Visual Studio 构建系统,覆盖 Linux 与 Windows 常见工程体系。
  • vcpkg 安装章节给出了 ./vcpkg install lz4,适合已有 vcpkg 依赖管理的团队。
  • 项目数据标记最新发布为 v1.11.0、发布数量为 5;因此版本和 ABI 仍应单独确认。

README 没有说明每种构建系统生成的库名、导出目标、编译选项和 ABI 保证,也没有说明你使用的 vcpkg 端口是否已同步到 v1.11.0。

  • README「Installation」:"make"、"make install"
  • README「Installation」:"It is compatible with parallel builds (`-j#`)"
  • README「Installation」:"Alternative build systems (CMake, Meson, Visual Studio) are provided"
  • README「Building LZ4 - Using vcpkg」:"./vcpkg install lz4"
  • 项目数据:main_language 为 C;latest_release 为 v1.11.0;release_count 为 5
make
材料未说明:README 没有列出各构建系统的具体 target 名称、安装目录、导出配置包和 ABI 兼容承诺。;README 没有说明 vcpkg 当前端口版本是否与项目最新发布 v1.11.0 一致。
适合 我在 Python/C 应用中处理大量结构相似的小文件和短消息,压缩端与解压端都能拿到同一个字典;LZ4 的字典压缩是否适合改善默认模式的压缩效果?
适合读者: 处理大量结构相似短消息和小文件的 Python/C 应用开发者,消息重复度不足以依赖默认压缩,但可以在压缩端和解压端分发同一字典

适合,尤其是短消息和小文件具有稳定结构、且两端能够同步字典时。

  • README 明确支持 dictionary compression,并说明 API 和 CLI 都可使用该能力。
  • 字典可以是任意输入文件,但实际只使用最后 64 KB,因此应关注字典尾部内容,而不是无限增大文件。
  • README 指出该能力可结合 Zstandard Dictionary Builder,目标就是显著改善 small files 的压缩表现。
  • API 入口位于 lib/lz4frame.h,CLI 通过 -D 操作修饰符使用。

这不是对随机数据或每条消息结构都不同的通用增益方案。README 没有说明你的 Python 绑定是否暴露字典 API,也没有给出字典传输成本、版本标识或失配时的错误行为。

  • README「LZ4 - Extremely fast compression」:"LZ4 is also compatible with dictionary compression"
  • README「LZ4 - Extremely fast compression」:"only the final 64 KB are used"
  • README「LZ4 - Extremely fast compression」:"drastically improve compression performance on small files"
  • README「LZ4 - Extremely fast compression」:"both at API and CLI ... (`-D`) levels"
make
材料未说明:README 没有说明目标 Python 绑定是否支持 frame dictionary API。;README 没有给出字典生成质量、分发开销、字典版本协商和字典不匹配时的具体错误行为。

✨ 核心亮点

  • LZ4 单核压缩速度超过 500 MB/s
  • LZ4 v1.11.0 解压达到 4950 MB/s
  • LZ4_HC -9 提升压缩比至 2.717
  • 支持 API、CLI 两层字典压缩

🔧 工程化

  • 提供 lz4.h、lz4hc.h、lz4frame.h 三套 C API
  • lz4 CLI 支持 -D 字典压缩与数据流帧
  • 加速度因子可在压缩速度与压缩比间调节

⚠️ 风险

  • LZ4 默认压缩比 2.112,低于 Zstandard 2.896
  • LZ4_HC -9 压缩仅 40 MB/s,速度代价明显
  • liblz4 用 BSD 2-Clause,lz4 CLI 用 GPL-2.0-or-later
  • make install 可能需要 root permissions

👥 适合谁?

  • 需要 C/C++ API 集成高速无损压缩的开发者
  • 处理多核数据流且重视 GB/s 解压速度的系统
  • 需要 lz4 CLI 或 Makefile 构建的 Linux 用户