Aller au contenu

snappy: Liens FFI LuaJIT pour Snappy, un compresseur/décompresseur rapide (https://code.google.com/p/snappy/)

Installation

Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.

CentOS/RHEL 7 ou 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

Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.

Ce document décrit lua-resty-snappy v1.0 publié le 01 octobre 2014.


lua-resty-snappy fournit des liaisons FFI LuaJIT à Snappy, un compresseur/décompresseur rapide (https://code.google.com/p/snappy/).

API Lua

Codes d'erreur

  SNAPPY_OK               = 0,
  SNAPPY_INVALID_INPUT    = 1,
  SNAPPY_BUFFER_TOO_SMALL = 2

string,len snappy.compress(input)

Compresse input avec l'algorithme Snappy et renvoie les données compressées et sa longueur. En cas d'erreur, cela renverra nil et un code d'erreur.

Exemple
local snappy    = require "resty.snappy"
local comp, err = snappy.compress("test")
if comp then
    -- faire quelque chose avec les données compressées et la longueur
    -- (la longueur est stockée dans la valeur err)...
else
    if err = 1 then
        print "Entrée invalide"
    elseif err == 2 then
        print "Taille du tampon trop petite"
    end
end

string,len snappy.uncompress(compressed)

Décompresse compressed avec l'algorithme Snappy et renvoie les données décompressées et sa longueur. En cas d'erreur, cela renverra nil et un code d'erreur.

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

number snappy.max_compressed_length(source_length)

Renvoie la longueur maximale possible en tant que nombre d'octets de données compressées lorsque la longueur non compressée source_length est donnée. Cela est utilisé pour créer un tampon pour la compression, mais peut également être utilisé dans une mesure rapide (et cela peut n'avoir rien à voir avec la longueur finale de la sortie compressée, autre que le fait qu'elle ne peut pas être plus grande que ce que cette fonction renvoie).

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

number snappy.uncompressed_length(compressed)

C'est un moyen plus rapide (que d'utiliser snappy.uncompress) pour déterminer combien d'octets les données compressées auront lorsqu'elles seront décompressées.

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

boolean snappy.validate_compressed_buffer(compressed)

Cela peut être utilisé pour vérifier si les octets compressés sont en fait des octets compressés par Snappy ou autre chose. C'est-à-dire quelque chose qui peut être décompressé avec Snappy.

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

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-snappy.