diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index a8ecc42a1e7d29f87bc5dc9198035ee66e95e060..cdfc648fff7e5d261919f4fdda0a99b4420eb4ae 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -238,38 +238,40 @@ def clear_cached_classifier_responses(hostname):
         r.delete(k)
 
 
-def refresh_ix_public_peers(hostname, netconf):
+def _refresh_peers(hostname, key_base, peers):
     task_logger = logging.getLogger(constants.TASK_LOGGER_NAME)
     task_logger.debug(
-        'removing cached ix public peers for %r' % hostname)
+        'removing cached %s for %r' % (key_base, hostname))
     r = get_redis(InventoryTask.config)
-    for k in r.keys('ix_public_peer:*'):
-        value = json.loads(r.get(k.decode('utf-8')).decode('utf-8'))
-        if value['router'] == hostname:
-            r.delete(k)
-
-    for peer in juniper.ix_public_peers(netconf):
+    for k in r.keys(key_base + ':*'):
+        # potential race condition: another proc could have
+        # delete this element between the time we read the
+        # keys and the next statement ... check for None below
+        value = r.get(k.decode('utf-8'))
+        if value:
+            value = json.loads(value.decode('utf-8'))
+            if value['router'] == hostname:
+                r.delete(k)
+
+    for peer in peers:
         peer['router'] = hostname
         r.set(
-            'ix_public_peer:' + peer['name'],
+            '%s:%s' % (key_base, peer['name']),
             json.dumps(peer))
 
 
-def refresh_vpn_rr_peers(hostname, netconf):
-    task_logger = logging.getLogger(constants.TASK_LOGGER_NAME)
-    task_logger.debug(
-        'removing cached vpn rr for %r' % hostname)
-    r = get_redis(InventoryTask.config)
-    for k in r.keys('vpn_rr_peer:*'):
-        value = json.loads(r.get(k.decode('utf-8')).decode('utf-8'))
-        if value['router'] == hostname:
-            r.delete(k)
+def refresh_ix_public_peers(hostname, netconf):
+    _refresh_peers(
+        hostname,
+        'ix_public_peer',
+        juniper.ix_public_peers(netconf))
 
-    for peer in juniper.vpn_rr_peers(netconf):
-        peer['router'] = hostname
-        r.set(
-            'vpn_rr_peer:' + peer['name'],
-            json.dumps(peer))
+
+def refresh_vpn_rr_peers(hostname, netconf):
+    _refresh_peers(
+        hostname,
+        'vpn_rr_peer',
+        juniper.vpn_rr_peers(netconf))
 
 
 @app.task