Node-redis: Json-Daten in Redis speichern

Erstellt am 25. Aug. 2015  ·  9Kommentare  ·  Quelle: NodeRedis/node-redis

Ich bin sehr neu bei redis. Also, was ich will, ist, die Daten zu speichern, die aus der Datenbank abgerufen werden. Muss ich jetzt client.set() für jedes Schlüssel-Wert-Paar verwenden, das von der Datenbank zurückgegeben wird, oder gibt es eine andere Möglichkeit, alle Daten mit einem Befehl zu speichern? Die Daten haben die Form:
<br i="6"/> {<br i="7"/> "member_username": "nikhil567",<br i="8"/> "member_gender": "Male",<br i="9"/> "member_dob": 0,<br i="10"/> "member_country": "",<br i="11"/> }<br i="12"/>

question

Hilfreichster Kommentar

@stockholmux Ich habe versucht, Flat zu verwenden, und es gibt einen Fehler: Maximale Aufrufstapelgröße überschritten ..
hast du da ne idee?

Alle 9 Kommentare

Sie möchten wahrscheinlich einen Hash in Redis verwenden. Mit einem Hash können Sie client.hmset ( mehr Info ) verwenden, um Ihr Objekt zu speichern.

Eine Anmerkung: JS-Objekte können verschachtelt werden, aber Redis-Hashes sind nur eine einzige Ebene. Wenn Ihre Daten also etwa so aussehen:

{ member_name : 'johndoe', address : { street: '123 Any Street', city: 'Anytown' } }

Sie müssen flach verwenden, bevor Sie es in Redis speichern. Ich habe einen Artikel über diesen Prozess geschrieben.

@stockholmux meine Daten werden im variablen Member gespeichert. also wie würde ich vorgehen?
var member={member_name:'svf',address:'cvbjnk'}
Können Sie mir bitte die Beispielabfrage geben?

Der richtige Weg ist gehasht, wie oben beschrieben, und flach, wie auch erklärt. Obwohl dieses Bibliotheksmodul neu für mich ist.
Es gibt eine Abkürzung, die generell verpönt ist (tldr macht es später langsamer, Daten analytisch zu durchsuchen), aber vielleicht manchmal passend: JSON.stringify your object und speichere es in einem normalen Schlüssel als String.

member_string = JSON.stringify member
redis_client.set 'your_key', member_string
# something like that
# if your object is already flat then you can (just):
redis_client.hmset 'hash_key', member
# something like that, been awhile

@abhinav76 Es hängt wirklich davon ab, wie Sie auf die Daten zugreifen, aber Sie möchten wahrscheinlich mit Ihrem member_name zugreifen, oder? Ziehen Sie das also in den Schlüssel.

var member={member_name:'svf',address:'cvbjnk'};

client.hmset('members:'+member.member_name, member, function(err) { ... });

Wenn Sie später diesen Hash und alle Felder abrufen möchten, gehen Sie folgendermaßen vor:

client.hgetall('members:svf', function(err,values) { ... });

Vielleicht möchten Sie auch in einen sekundären Speicher schauen, um alle Ihre member:* -Hashes im Auge zu behalten - so etwas wie ein Redis-Set oder eine Liste

danke @kulicuu und @stockholmux .

Meine Redis-Daten sehen wie folgt aus:
Wie kann ich nun eines der Felder in diesen Daten aktualisieren?
@kulicuu @stockholmux

<br i="10"/> "{\"f_name\":\"\",\"profile\":{\"member_username\":\"nikhil371\",\"member_gender\":\"Male\",\"member_dob\":0,\"member_country\":\"\",\"state\":\"\",\"city\":\"\",\"hair_colour\":\"\",\"hairstyle\":\"\",\"eye_colour\":\"\",\"eyesight\":\"\",\"complexion\":\"\",\"height\":\"\",\"body_ENGINE\":\"\",\"exercise\":\"\",\"religion\":\"\",\"religious_beliefs\":\"\",\"education\":\"\",\"occupation\":\"\",\"annual_income\":\"\",\"ethnicity\":\"\",\"nationality\":\"\",\"languages\":\"\",\"diet\":\"\",\"smoke\":\"\",\"drink\":\"\",\"current_relationship_status\":\"\",\"preferred_relationship\":\"\",\"profile_tagline\":\"\",\"screened\":\"N\",\"photo_status\":\"None\",\"hidden\":\"N\",\"record_date\":0,\"update_date\":0,\"ip\":\"\",\"member_id\":10548,\"time_stamp\":0,\"photo_key\":\"\",\"profile_personality\":{\"member_username\":\"nikhil371\",\"feature\":\"xcvbnkm\",\"zodiac\":\"vbnim\",\"favorites\":\"qerrb\",\"motto\":\"cvbn\",\"irritated\":\"aguweihjok\",\"sexiest\":\"atwvyebuinmo\",\"good_evening\":\"ywsbciobnom\",\"like_to_do\":\"vdsfd371\",\"outgoing\":\"ev\",\"prefer_to\":\"ebvjnk\",\"record_date\":371,\"update_date\":372,\"profile_other_info\":{\"id\":10516,\"member_username\":\"nikhil371\",\"describe_yourself\":\"tyuh\",\"views\":371,\"admin_login\":\"\",\"screening_assigned_to\":\"\"}}}}"<br i="11"/>

@kulicuu Wenn Sie JSON.stringify , müssen Sie JSON.parse um die Daten zu deserialisieren, Ihr Feld zu aktualisieren, dann müssen Sie es mit dem gleichen Schlüssel neu schreiben JSON.stringify . Es ist ziemlich verschwenderisch, sowohl in Bezug auf die CPU- als auch auf die Platzeffizienz.

Mithilfe von Hashes können Sie ein einzelnes Feld aktualisieren, indem Sie Folgendes tun: client.hset('my:key:name','member_gender','female') . Wenn Sie flat um die Verschachtelung Ihres Objekts aufzuheben, könnten Sie ein einzelnes Feld mit client.hset('my:key:name','profile_personality.member_username','asdf') aktualisieren.

Ich stimme zu, dass es verpönt ist - und danke @stockholmux für die Erläuterung der Diskussion, warum das so ist -, aber es lohnt sich, es als Abkürzung zu erwähnen.

Zum Kontext, hier ist etwas, das ich vor ungefähr 8 Monaten geschrieben habe. Ich musste die große Umgestaltung verschieben, die die meisten Modelle in die Lua-Skripte von Redis verschoben hätte.
https://github.com/Terebinth/britvic/blob/deprecated_version/server/models/user_iced.iced
(die Variable d ist der Redis-Client)
Schauen Sie sich auch einige der anderen Modelle an. @abhinav76

@stockholmux Ich habe versucht, Flat zu verwenden, und es gibt einen Fehler: Maximale Aufrufstapelgröße überschritten ..
hast du da ne idee?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen