2016-06-03 13 views
0

Ich benutze redis um jsonwebtokens zu speichern. Ich bin ein wenig verwirrt über den Verbrauch von Speicher für jede Aufzeichnung.Redis's Speicherverbrauch

Angenommen, ich habe eine Instanz in der Google Cloud, der 4 GB Arbeitsspeicher zugewiesen ist. Ich möchte wissen, wie viele Datensätze sie verarbeiten kann.

Vorausgesetzt, dass ein Datensatz im Durchschnitt 1 String-Werte ohne he Identifier hat und jede Zeichenfolge hat durchschnittlich 200 Zeichen.

Antwort

1

Es geht darum, wie Sie sie speichern. Verwenden von Hashes (richtige Größenanpassung) oder einfaches Schlüsselwertpaar. Lesen Sie dieses Dokument für weitere Informationen http://redis.io/topics/memory-optimization

Für 1 Million Schlüssel (einfaches Schlüsselwertpaar) von 200 Zeichen benötigt es etwa 300 MB. Also für 4 GB können Sie mehr oder weniger 14 Millionen Schlüssel speichern, denke ich. Um dies zu gewährleisten, installieren Sie redis auf Ihrem Rechner, führen Sie ein einfaches Java-Schnipsel (mit Jedis) aus und überprüfen Sie den Speicherverbrauch vor und nach dem Einfügen.

Jedis jedis = new Jedis("localhost"); 
for i=0 to N  
jedis.set("Key_"+i,string); 
1

Redis wickelt Strings in sds struct, die 3 zusätzliche Bytes erfordert (oder mehr) für jede Saite.

Jeder sds wird in einem redisObject struct (mit einem Zeiger auf das sds-Objekt) gespeichert. Es dauert etwa 16 zusätzliche Bytes, wenn Sie auf einem 64-Bit-Computer sind. Sie können auch die entries in der Hash-Tabelle betrachten. Jeder benötigt 24 Bytes.

So können Sie davon ausgehen, dass jeder Ihrer Zeichenfolge 243 Bytes belegt. 1 Million Strings verwenden mehr als 250 MB (Redis selbst benötigt Speicher).