--- a
+++ b/util/cache.py
@@ -0,0 +1,21 @@
+# Copied from python 3 documentation
+# https://docs.python.org/3/library/collections.html#ordereddict-examples-and-recipes
+from collections import OrderedDict
+
+
+class LRU(OrderedDict):
+    """Limit size, evicting the least recently looked-up key when full"""
+    def __init__(self, maxsize=128, *args, **kwargs):
+        self.maxsize = maxsize
+        super().__init__(*args, **kwargs)
+
+    def __getitem__(self, key):
+        value = super().__getitem__(key)
+        self.move_to_end(key)
+        return value
+
+    def __setitem__(self, key, value):
+        super().__setitem__(key, value)
+        if len(self) > self.maxsize:
+            oldest = next(iter(self))
+            del self[oldest]