跳转至

snappy: LuaJIT FFI 绑定 Snappy,一个快速的压缩/解压缩工具 (https://code.google.com/p/snappy/)

安装

如果您尚未设置 RPM 仓库订阅,请 注册。然后您可以继续以下步骤。

CentOS/RHEL 7 或 Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-snappy

CentOS/RHEL 8+、Fedora Linux、Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-snappy

要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua

本文档描述了 lua-resty-snappy v1.0,于 2014 年 10 月 01 日发布。


lua-resty-snappy 提供了 LuaJIT FFI 绑定到 Snappy,一个快速的压缩/解压缩工具 (https://code.google.com/p/snappy/)。

Lua API

错误代码

  SNAPPY_OK               = 0,
  SNAPPY_INVALID_INPUT    = 1,
  SNAPPY_BUFFER_TOO_SMALL = 2

string,len snappy.compress(input)

使用 Snappy 算法压缩 input,并返回压缩数据及其长度。 在出错时将返回 nil 和错误代码。

示例
local snappy    = require "resty.snappy"
local comp, err = snappy.compress("test")
if comp then
    -- 对压缩数据和长度进行处理
    -- (长度存储在 err 值中)...
else
    if err == 1 then
        print "无效输入"
    elseif err == 2 then
        print "缓冲区太小"
    end
end

string,len snappy.uncompress(compressed)

使用 Snappy 算法解压 compressed,并返回解压后的数据及其长度。 在出错时将返回 nil 和错误代码。

示例
local snappy      = require "resty.snappy"
local uncomp, err = snappy.uncompress(snappy.compress("test"))

number snappy.max_compressed_length(source_length)

返回给定未压缩的 source_length 时,压缩数据的最大可能长度(以字节为单位)。这用于创建压缩的缓冲区,但也可以用于快速测量(并且它可能与最终压缩输出长度无关,除了它不能大于此函数返回的值)。

示例
local snappy = require "resty.snappy"
local number = snappy.max_compressed_length(1000)

number snappy.uncompressed_length(compressed)

这是比使用 snappy.uncompress 更快的方法,用于确定压缩数据在解压缩时将占用多少字节。

示例
local snappy = require "resty.snappy"
local number = snappy.uncompressed_length(snappy.compress("test"))

boolean snappy.validate_compressed_buffer(compressed)

这可以用来检查压缩字节是否实际上是 Snappy 压缩的字节或其他内容。即,可以用 Snappy 解压缩的内容。

示例
local snappy = require "resty.snappy"
local bool   = snappy.validate_compressed_buffer(snappy.compress("test"))

GitHub

您可以在 nginx-module-snappy 的 GitHub 仓库 中找到此模块的其他配置提示和文档。