summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/util/caches/expiringcache.py14
1 files changed, 4 insertions, 10 deletions
diff --git a/synapse/util/caches/expiringcache.py b/synapse/util/caches/expiringcache.py
index 9b44b3fab3..b9ead9cbd5 100644
--- a/synapse/util/caches/expiringcache.py
+++ b/synapse/util/caches/expiringcache.py
@@ -15,6 +15,7 @@
 
 from synapse.util.caches import register_cache
 
+from collections import OrderedDict
 import logging
 
 
@@ -49,7 +50,7 @@ class ExpiringCache(object):
 
         self._reset_expiry_on_get = reset_expiry_on_get
 
-        self._cache = {}
+        self._cache = OrderedDict()
 
         self.metrics = register_cache(cache_name, self)
 
@@ -70,15 +71,8 @@ class ExpiringCache(object):
         self._cache[key] = _CacheEntry(now, value)
 
         # Evict if there are now too many items
-        if self._max_len and len(self) > self._max_len:
-            sorted_entries = sorted(
-                self._cache.keys(),
-                key=lambda item: item[1].time,
-            )
-
-            while len(self) > self._max_len and sorted_entries:
-                key = sorted_entries.pop()
-                self._cache.pop(key)
+        while self._max_len and len(self) > self._max_len:
+            self._cache.popitem(last=False)
 
     def __getitem__(self, key):
         try: