diff --git a/inventory_provider/config.py b/inventory_provider/config.py
index b6631ad366aab7a43f3dd2c6b3b432766b2c514f..36d814633db7b53fdc9038b5c373f173bf4e6326 100644
--- a/inventory_provider/config.py
+++ b/inventory_provider/config.py
@@ -29,9 +29,23 @@ CONFIG_SCHEMA = {
             },
             "required": ["private-key", "known-hosts"],
             "additionalProperties": False
+        },
+        "redis": {
+            "type": "object",
+            "properties": {
+                "hostname": {"type": "string"},
+                "port": {"type": "integer"}
+            },
+            "required": ["hostname", "port"],
+            "additionalProperties": False
         }
     },
-    "required": ["alarms-db", "oid_list.conf", "routers_community.conf"],
+    "required": [
+        "alarms-db",
+        "oid_list.conf",
+        "routers_community.conf",
+        "ssh",
+        "redis"],
     "additionalProperties": False
 }
 
diff --git a/inventory_provider/router_interfaces.py b/inventory_provider/router_interfaces.py
index 84127bbfecb4be844b68aab9342e3385e0b96678..95a09be5492c59710b33c6377bf50a951dd26839 100644
--- a/inventory_provider/router_interfaces.py
+++ b/inventory_provider/router_interfaces.py
@@ -3,6 +3,7 @@ import logging
 from multiprocessing import Process, Queue
 
 import click
+import redis
 
 from inventory_provider import constants
 from inventory_provider import snmp
@@ -24,7 +25,7 @@ def ssh_exec_commands_q(hostname, ssh_params, commands, q):
     threading_logger.debug("[<<EXIT] exec_router_commands_q: %r" % hostname)
 
 
-def get_router_details(router, params, q):
+def get_router_details(router, params):
 
     threading_logger = logging.getLogger(constants.THREADING_LOGGER_NAME)
 
@@ -52,21 +53,26 @@ def get_router_details(router, params, q):
     command_output = commands_proc_queue.get()
     assert len(command_output) == len(commands)
 
-    result = {}
+    r = redis.StrictRedis(
+        host=params["redis"]["hostname"],
+        port=params["redis"]["port"])
     for c, o in zip(commands, command_output):
         if c["key"]:
-            result[c["key"]] = c["parser"](o)
-
+            r.hset(
+                name=router["hostname"],
+                key=c["key"],
+                value=json.dumps(c["parser"](o)))
     commands_proc.join()
     threading_logger.debug("... got commands result & joined: %r" % router)
 
     threading_logger.debug("waiting for snmp ifc results: %r" % router)
-    result["snmp-interfaces"] = snmpifc_proc_queue.get()
+    r.hset(
+        name=router["hostname"],
+        key="snmp-interfaces",
+        value=json.dumps(snmpifc_proc_queue.get()))
     snmpifc_proc.join()
     threading_logger.debug("... got snmp ifc result & joined: %r" % router)
 
-    q.put(result)
-
     threading_logger.debug("[<<EXIT]get_router_details: %r" % router)
 
 
@@ -76,16 +82,14 @@ def load_network_details(params):
 
     processes = []
     for r in params["routers"]:
-        q = Queue()
-        p = Process(target=get_router_details, args=(r, params, q))
+        p = Process(target=get_router_details, args=(r, params))
         p.start()
-        processes.append({"router": r, "process": p, "queue": q})
+        processes.append({"router": r, "process": p})
 
     result = {}
     for p in processes:
         threading_logger.debug(
             "waiting for get_router_details result: %r" % p["router"])
-        result[p["router"]["hostname"]] = p["queue"].get()
         p["process"].join()
         threading_logger.debug(
             "got result and joined get_router_details proc: %r" % p["router"])
@@ -106,11 +110,25 @@ def _validate_config(ctx, param, value):
     default=open("config.json"),
     callback=_validate_config)
 def cli(params):
-    network_details = load_network_details(params)
+    load_network_details(params)
+
+    r = redis.StrictRedis(
+        host=params["redis"]["hostname"],
+        port=params["redis"]["port"])
+
+    result = {}
+    for hostname in r.keys():
+        host = {}
+        for key in r.hkeys(name=hostname):
+            host[key.decode("utf-8")] = json.loads(
+                r.hget(hostname, key).decode("utf-8")
+            )
+        result[hostname.decode("utf-8")] = host
+
     filename = "/tmp/router-info.json"
     logging.debug("writing output to: " + filename)
     with open(filename, "w") as f:
-        f.write(json.dumps(network_details))
+        f.write(json.dumps(result))
 
 
 if __name__ == "__main__":
diff --git a/requirements.txt b/requirements.txt
index ea667eb9d92fa5f7855ca9f376c17a27a22e1686..9d2440c74c133be6ad934a9d78f3bb2df2bd1bfe 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,5 +4,6 @@ pysnmp
 jsonschema
 paramiko
 flask
+redis
 
 pytest
diff --git a/setup.py b/setup.py
index 65e429b28e1424c732fa1a447ed49e7ee09e7cbc..df1c056a7d1475714452ca99c30bbdb821a5af7b 100644
--- a/setup.py
+++ b/setup.py
@@ -15,6 +15,7 @@ setup(
         'pysnmp',
         'jsonschema',
         'paramiko',
-        'flask'
+        'flask',
+        'redis'
     ]
 )
diff --git a/test/test_data_routes.py b/test/test_data_routes.py
index de7c0f809227a9aeff1a4aa9991df7451dcc93a6..811adb0df69bac7f190d05c5e42a8a8860a8bf97 100644
--- a/test/test_data_routes.py
+++ b/test/test_data_routes.py
@@ -99,6 +99,10 @@ def data_config_filename(tmp_dir_name):
         "ssh": {
             "private-key": "private-key-filename",
             "known-hosts": "known-hosts=filename"
+        },
+        "redis": {
+            "hostname": "xxxxxx",
+            "port": 6379
         }
     }