由于我是Redis的新手,因此我需要一些有关如何在REDIS中存储以下复杂json的指导,以便我们可以从REDIS中访问JSON的元素-
"Reservations": [ { "Instances": [ { "Monitoring": { "State": "disabled" }, "PublicDnsName": "", "State": { "Code": 16, "Name": "running" }, "EbsOptimized": "false", "LaunchTime": "xxxxxxxxx", "PrivateIpAddress": "x.x.x.x", "ProductCodes": [], "VpcId": "xxxxx", "StateTransitionReason": "", "InstanceId": "i-xxxxxxx", "EnaSupport": "true", "ImageId": "ami-xxxxx", "PrivateDnsName": "ip-xxxxxx.ec2.internal", "KeyName": "xxxxxxv", "SecurityGroups": [ { "GroupName": "xxx", "GroupId": "sg-xxxx" }, { "GroupName": "xxxxxx", "GroupId": "sg-xxxxx" }, { "GroupName": "xxxxx", "GroupId": "sg-xxxxxx" }, { "GroupName": "xxxxx", "GroupId": "sg-xxxxxx" } ], "ClientToken": "xxxxx", "SubnetId": "subnet-xxxxx", "InstanceType": "t2.micro", "NetworkInterfaces": [ { "Status": "in-use", "MacAddress": "xxxxxxxx", "SourceDestCheck": "true", "VpcId": "vpc-xxxxx", "Description": "", "NetworkInterfaceId": "eni-xxxxx", "PrivateIpAddresses": [ { "PrivateDnsName": "ip-xx-ec2.internal", "Primary": "true", "PrivateIpAddress": "xxxxx" } ], "PrivateDnsName": "ip-xxxx-xx.ec2.internal", "Attachment": { "Status": "attached", "DeviceIndex": 0, "DeleteOnTermination": "true", "AttachmentId": "eni-attach-xxxxx", "AttachTime": "2017-0xxxxx" }, "Groups": [ { "GroupName": "xx", "GroupId": "sg-xxxx" }, { "GroupName": "xxxx", "GroupId": "sg-xxx" }, { "GroupName": "xxxx", "GroupId": "sg-xxx" }, { "GroupName": "xxxx", "GroupId": "sg-xxxx" } ], "Ipv6Addresses": [], "OwnerId": "xxx", "SubnetId": "subnet-xxxx", "PrivateIpAddress": "1xxxx" } ], "SourceDestCheck": "true", "Placement": { "Tenancy": "default", "GroupName": "", "AvailabilityZone": "us-xxxxxxx" }, "Hypervisor": "xen", "BlockDeviceMappings": [ { "DeviceName": "/dev/xxxxxx", "Ebs": { "Status": "attached", "DeleteOnTermination": "true", "VolumeId": "vol-xxxxxx", "AttachTime": "2017-xxxxxxx" } } ], "Architecture": "x86_64", "RootDeviceType": "ebs", "IamInstanceProfile": { "Id": "xxxxxxxx", "Arn": "arn:aws:iam::xxxxxxx" }, "RootDeviceName": "/dev/xxxxx", "VirtualizationType": "hvm", "Tags": [ { "Value": "xxxxxx", "Key": "aws:cloudformation:stack-name" }, { "Value": "xxxxxxx", "Key": "aws:cloudformation:logical-id" }, { "Value": "arn:aws:cloudformation:xxxxxx", "Key": "aws:cloudformation:stack-id" } ], "AmiLaunchIndex": 0 } ], "ReservationId": "r-xxxxx", "RequesterId": "xxxxx", "Groups": [], "OwnerId": "xxxxxx" } ] }
我需要以一种查询IP /主机名/ InstanceID的方式来存储它,以获取JSON中存在的所有元素。
我需要上述指导。
您无法直接做到这一点,但是幸运的是,有一个名为ReJSON的新Redis模块可以完全满足您的需求,并且它还具有不错的Python绑定。您需要使用redis 4.0,然后编译并安装ReJSON并配置redis来加载它,并且它添加了用于JSON操作的本机命令。
它使您可以将JSON文档存储在redis中,然后获取或修改文档树中的特定元素,而无需检索(或在内部甚至解析)该文档。它的Python客户端甚至允许您存储python字典并将其自动转换为JSON。
ReJSON模块:http://rejson.io
Python客户端:https://pypi.python.org/pypi/rejson
例:
from rejson import Client, Path rj = Client(host='localhost', port=6379) # Set the key `obj` to some object obj = { 'answer': 42, 'arr': [None, True, 3.14], 'truth': { 'coord': 'out there' } } rj.jsonset('obj', Path.rootPath(), obj) # Get something print 'Is there anybody... {}?'.format( rj.jsonget('obj', Path('.truth.coord')) )