Перейти к содержанию

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

Чтобы использовать эту Lua библиотеку с NGINX, убедитесь, что nginx-module-lua установлен.

Этот документ описывает lua-resty-snappy v1.0, выпущенный 1 октября 2014 года.


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)

Сжимает input с помощью алгоритма Snappy и возвращает сжатые данные и их длину. В случае ошибки это вернет 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)

Декомпрессирует compressed с помощью алгоритма Snappy и возвращает несжатые данные и их длину. В случае ошибки это вернет 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

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-snappy.