首页 > 解决方案 > 如何使用 python 将大型 .json 文件读入 redis,以便创建键值对?

问题描述

我有一个包含结构化位置数据(坐标、类别等)的大型 json 文件,我需要在 redis 中创建键值对以进行进一步查询。我已经能够在这里和那里找到一些信息,但我正在努力将它们整合成可用的东西。

这是json的一般结构;

{ 
    "_id" : NumberInt(83412), 
    "contact" : {
        "GooglePlaces" : null, 
        "Foursquare" : "https://foursquare.com/v/caf%C3%A9-vavin/4adcda06f964a520eb3221e3"
    }, 
    "name" : "Café Vavin", 
    "location" : {
        "city" : "Paris", 
        "coord" : {
            "coordinates" : [
                2.3307001590729, 
                48.843868593865
            ], 
            "type" : "Point"
        }, 
        "address" : "18 rue Vavin"
    }

标签: pythonjsondatabaseredis

解决方案


鉴于您的 Json 数据是嵌套/多级的,您不能将它们直接存储在 Redis 哈希中。因此,您必须将值序列化并将其存储为字符串(其他格式也可以,但为了简单起见,让我们使用字符串)。这意味着当您get从 Redis 中获取值时,您必须将 Json(存储为字符串)反序列化为代码中的适当对象。因此,键是 the id,值是 Json 的其余部分作为字符串。

现在,继续将巨大的 Json 加载到 Redis 中,这是一个两步过程:

  1. 解析您的输入 Json 文件并将其分解为可用于“Redis Mass Insertion”的格式 - https://redis.io/topics/mass-insert。您必须提取 的值_id并将其用作键,然后提取 Json 的其余部分并按照value上面链接中显示的格式使用它。
  2. 使用上一步中的内容作为输入运行 Redis 批量插入。set您可以将每个输入添加到Redis 中的单个中。

现在您可以get对.set如果您有id. 请记住,Redis 是一种内存缓存,它经过调整可实现更快的存储和检索。除非您以不同的方式存储/复制数据以满足不同的查询需求,否则您无法在 Redis 上运行复杂的查询。

如果您希望我添加更多详细信息,请随时对此答案发表评论。我只能在问题的评论部分回复这么多。因此,我将所有内容合并到这个答案中。如果您希望我解决任何具体问题,我可以添加更多内容。

更多关于质量插入的参考和示例:


推荐阅读