Frage

In meiner App möchte ich die Daten komprimieren, die in Redis-String-Schlüsseln gespeichert werden.Ich möchte jedoch nicht alle komprimieren, da sich kleine Datenwerte nicht gut komprimieren lassen und ich den CPU-Overhead vermeiden möchte.

Meine Frage ist, wie ich erkennen kann, dass ein Wert komprimiert ist, wenn ich den Zeichenfolgenschlüssel lese, um eine Dekomprimierung durchzuführen.

Ich habe versucht, mit Code einen benutzerdefinierten Header an den Zip-Stream anzuhängen, hatte aber kein Glück.

War es hilfreich?

Lösung

Ein gängiges Muster ist die Verwendung eines Payload-Präfixes in Kombination mit einem Trennzeichen.

Sie könnten beispielsweise ein Format wie dieses verwenden:

[key];[encoding];[metatype];[version]\t[payload]

Ich verwende Trennzeichen ; Und \t Hier.Wählen Sie andere Trennzeichen, wenn Ihnen diese besser gefallen.Natürlich müssen Sie verhindern, dass diese Trennzeichen in Ihren Präfix-Tags selbst vorkommen. [payload] enthält zum Beispiel Binärdaten, String-Daten, was auch immer. [encoding] kann zum Beispiel sein zip,msgpack,utf8,base64,json (nur ein paar Ideen).

Der Vorteil der Verwendung eines Payload-Präfixes besteht darin, dass Sie die Payload selbst nicht deserialisieren oder dekomprimieren müssen, um sie als Entität zu verwenden.In Redis-Lua können Sie beispielsweise nicht entpacken.Sie können jedoch einfach das Preload-Präfix lesen und auf Client-Anfragen reagieren.Auch wenn Du dürfen deserialisieren innerhalb von Redis-Lua, wie JSON oder MsgPack Formate, vielleicht nicht wollen das aus Leistungsgründen zu tun.

Es gibt natürlich auch andere Optionen.Wenn Sie Präfixe mit Trennzeichen nicht mögen, können Sie die Nutzlast und das Encoding-Tag auch in ein Array einfügen und es als MsgPack serialisieren.Oder verwenden Sie JSON für das Präfix, dann ein Nullzeichen und dann die Nutzlast.Oder sogar (etwas speichereffizienter):Verwenden Sie 4 oder 8 Bytes für die Präfixgröße, MsgPack für das Präfix und verwenden Sie die Präfixgröße, um zu bestimmen, wo die Nutzlast beginnt (die möglicherweise auch MsgPack sein kann).

Abschließender Ratschlag:Machen Sie sich nicht mit der Nutzlast selbst herum (z. B. indem Sie den ZIP-Header ändern), das wird Ihnen zwangsläufig eine Menge unnötiger Probleme bereiten.

Hoffe das hilft, TW

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top