Knoten Redis: Wie filter, eine sortierte Menge von Schlüsseln und abrufen von einzelnen Schlüsseln Hash-Werte in einem Aufruf
Ich arbeite mit einer redis Datenbank in node.js mit node_redis. Hier ist ein kurzes Beispiel für eine Struktur, die ähnlich zu dem, was ich verwende.
hmset('user:1234',
'user_id', 1234,
'user_name', billy,
'user_age', 16);
//add user to group 1 store their id with their age as their score
zadd(['group:1:users_by_age', 16, user:1234]);
hmset('user:1235',
'user_id', 1235,
'user_name', jake,
'user_age', 21);
//add user to group 1 store their id with their age as their score
zadd(['group:1:users_by_age', 21, user:1235]);
Nun können sagen, ich wollte alle user-Daten für Benutzer über dem Alter von 18 in der Gruppe:1
Ich weiß, ich kann mit der Benutzer-keys durch den Aufruf
postClient.zrangebyscore(
[ 'group:1:users_by_age', '18', '+inf'],
function( err, results ){
console.log(results);
}
);
Wo ich das verloren ist, wie kann ich abrufen aller Benutzer-Objekte auf einmal?
Nehmen Sie einen Schritt weiter, ist es möglich, sowohl zrangebyscore und erhalten Sie alle userobjects in einem Aufruf?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass Sie können. Der SORT-Befehl ist GET-Funktionalität gebaut, in denen können Sie solch eine Sache tun in einem Aufruf, aber es gibt keinen Weg, um die Ergebisse von einem ZRANGEBYSCORE SORT (außer der Speicherung in einer temporären Schlüssel und dann mit SORT-Schlüssel).
Es ist auch keine Natürliche Art und Weise abrufen, die mehrere hashes auf einmal.
Mit Ihrer aktuellen Umsetzung, unter Berücksichtigung dieser Einschränkungen, die Sie erhalten möglicherweise alle Benutzer, die mit einem multi wie:
Du könnte dies mit einem luascript wenn das abrufen der Liste mit den Tasten und Durchlaufen ihn, ruft hmget oder hgetall auf jeder Taste.
Ich etwas tun, wie dies im folgenden Beispiel, mit hmget und Sondertasten.
Offensichtlich disclaimer: ich bin kein lua-Programmierer. Kurze Erklärung: das Skript braucht eine start-und end-Bereich für Benutzer Alter, dann eine beliebige Anzahl von hash-Schlüsseln, die es verwendet für hmget auf jeder user-Taste, und Anhängen Sie alle in ein array, die eingepackt werden als Benutzer-Objekte zurück, die in der javascript.
Beachten Sie, dass es wäre trivial zu verarbeiten, die der Benutzer wieder in Objekte, die innerhalb des lua-Skript, aber wenn konvertierte zurück zum redis-Daten, Strukturen, lua-Tabellen werden redis multi bulk-Antworten (arrays), und die Struktur, die verloren gehen würden. Deshalb ist es notwendig zu konvertieren, multi-bulk-Antwort in Benutzer-Objekte zurück, die in javascript.