Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use 5.16.1;
- use strict;
- use warnings;
- use utf8;
- use Redis::Fast;
- use CBOR::XS;
- use JSON::XS;
- use Data::Dumper;
- my $cbor=CBOR::XS->new;
- my $redC=Redis::Fast->new;
- use Time::HiRes qw(time);
- $redC->select(8);
- sub get_tree {
- my ($rootNode, $cb)=@_;
- $rootNode='s'.$rootNode unless substr($rootNode,0,1) eq 's';
- my ($rslt,$rx_get_tree);
- my $GC=0;
- $rx_get_tree=sub {
- unless (@_) {
- $cb->($rslt) unless $GC;
- return
- }
- my @deps=map 's'.$_, @_;
- $GC++;
- $redC->mget(@deps, sub {
- my $c=0; $GC--;
- $rx_get_tree->(
- map {
- @{ scalar($rslt->{$deps[$c++]}=$cbor->decode($_))->{'dependencies'} || [] };
- } @{$_[0]}
- );
- });
- };
- $redC->get($rootNode, sub {
- $rx_get_tree->( @{ scalar($rslt->{$rootNode}=$cbor->decode($_[0]))->{'dependencies'} || [] } );
- });
- }
- my $startTime=time();
- get_tree(shift, sub {
- my $est=scalar(time()-$startTime);
- say JSON::XS->new->encode(shift);
- say STDERR $est, ' sec.'
- });
- $redC->wait_all_responses;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement