2016-06-20 9 views
1

Also arbeite ich an einem Projekt für die Schule, aber ich bleibe irgendwo stecken. Ich erstelle ein Objekt, das 3 Variablen enthält. Quell-IP, Ziel-IP, DNS-Name. Ich mache es in einem Objekt, dann wickle ich es als JSON und schreibe es in Redis mit dem Namen "dnsanswer", so dass die ganze Zeile in redis so aussieht, wenn ich überprüfe, ob es richtig geschrieben ist, bekomme ich diese Ausgabe:Redis write dict und retrieve by nested key

{"srcip": "74.125.136.94", "NA": "www.google.nl", "dstip": "192.168.79.135"} 

Ich bekomme diese Ausgabe mit LIDEX "Dnsanswer" -1, die mir die letzte Zeile in Redis zeigt.

Die Sache, wo ich jetzt feststecke, ist dies; Ich möchte nur den "dstip" von Redis anfordern können. Ich benutzte rpush, um das Objekt zu redis und lindex zu schreiben, um die letzte geschriebene Zeile in Redis zu sehen.

Dies ist der Code für die Funktion, es zu schreiben, um Redis:

def toRedis(pakket): 

    r_serv = redis.StrictRedis(host='localhost', port=6379, db=0) 

    r_serv.rpush("dnsanswer", pakket) #werkt 
    print r_serv.lindex("dnsanswer", -1) #werkt 

TL; DR Wie kann ich nur einen Wert von einem Schlüssel, das ist in Redis erhalten? (nicht sicher, ob ich es richtig formuliere).

Antwort

1

Das Element der Liste ist für Redis undurchsichtig, Sie können also nicht nur Teile davon anfordern. Was Sie tun können, ist entweder Ihre JSON in Ihrem Python-Code deserialisiert und den Schlüssel extrahieren, die Sie interessieren, oder ein serverseitige Lua Script verwenden (mit EVAL oder EVALSHA) dafür:

local member = redis.call('LINDEX', KEYS[1], -1) 
local json = cjson.decode(member) 
return json[] 
+0

Sorry für meine späte Antwort. Aber da du mir die Information gegeben hast, dass das nicht möglich ist, habe ich beschlossen, sie als Wörterbuch an Redis zu schicken, anstatt an ein Objekt. – Nerotix

+0

Saner Wahl :) –