diff options
author | Nick Mills-Barrett <nick@fizzadar.com> | 2022-08-04 15:49:55 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-04 15:49:55 +0100 |
commit | 41320a0554716aaf7cec6172da98e002c48344c5 (patch) | |
tree | 63648ef0a7531327369a775fab14158b01a0b207 /synapse/util | |
parent | Update some outdated information on `sso_mapping_providers.md` (#13449) (diff) | |
download | synapse-41320a0554716aaf7cec6172da98e002c48344c5.tar.xz |
Optimise async get event lookups (#13435)
Still maintains local in memory lookup optimisation, but does any external lookup as part of the deferred that prevents duplicate lookups for the same event at once. This makes the assumption that fetching from an external cache is a non-zero load operation.
Diffstat (limited to 'synapse/util')
-rw-r--r-- | synapse/util/caches/lrucache.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/synapse/util/caches/lrucache.py b/synapse/util/caches/lrucache.py index b3bdedb04c..aa93109d13 100644 --- a/synapse/util/caches/lrucache.py +++ b/synapse/util/caches/lrucache.py @@ -834,9 +834,26 @@ class AsyncLruCache(Generic[KT, VT]): ) -> Optional[VT]: return self._lru_cache.get(key, update_metrics=update_metrics) + async def get_external( + self, + key: KT, + default: Optional[T] = None, + update_metrics: bool = True, + ) -> Optional[VT]: + # This method should fetch from any configured external cache, in this case noop. + return None + + def get_local( + self, key: KT, default: Optional[T] = None, update_metrics: bool = True + ) -> Optional[VT]: + return self._lru_cache.get(key, update_metrics=update_metrics) + async def set(self, key: KT, value: VT) -> None: self._lru_cache.set(key, value) + def set_local(self, key: KT, value: VT) -> None: + self._lru_cache.set(key, value) + async def invalidate(self, key: KT) -> None: # This method should invalidate any external cache and then invalidate the LruCache. return self._lru_cache.invalidate(key) |