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.