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:
|