【问题标题】:Redis write dict and retrieve by nested keyRedis 写字典并通过嵌套键检索
【发布时间】:2016-10-21 20:38:10
【问题描述】:

所以我正在为学校做一个项目,但我被困在某个地方。我创建了一个包含 3 个变量的对象;源 IP、目标 IP、DNS 名称。我在一个对象中创建它,然后将其包装为 JSON 并将其写入名为“dnsanswer”的 Redis,因此 redis 中的整行看起来像这样,当我检查它是否正确写入时,我得到以下输出:

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

我通过使用 lindex "dnsanswer" -1 获得此输出,它将显示 Redis 中最后添加的行。

我现在卡住的是这个;我希望能够从 Redis 请求“dstip”。我使用 rpush 将对象写入 redis 和 lindex 以查看 Redis 中最后写入的行。

这是函数将其写入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 我如何才能从 Redis 中的键接收值? (不确定我的表述是否正确)。

【问题讨论】:

    标签: python json dictionary redis


    【解决方案1】:

    List 的成员对 Redis 是不透明的,因此您不能只请求其中的一部分。您可以做的是在 Python 代码中反序列化 JSON 并提取您感兴趣的密钥,或者为此使用服务器端 Lua 脚本(使用 EVALEVALSHA):

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

    【讨论】:

    • 抱歉我的回复晚了。但既然你给了我不可能的信息,我决定把它作为字典而不是对象发送到 Redis。
    猜你喜欢
    • 2011-05-13
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2015-03-31
    • 2022-10-16
    • 2013-01-19
    相关资源
    最近更新 更多