From d2d695dcb6d3ec5e97ef4cf35decd776f393d176 Mon Sep 17 00:00:00 2001 From: Zev Benjamin Date: Wed, 20 Nov 2013 16:16:48 -0500 Subject: [PATCH] Add an in-memory Client object cache Client objects are immutable and there are very few of them, so caching them in memory is cheap and saves a trip to memcached. (imported from commit 300b9b402f4e509f86a7fd86b5f898dc3f43738f) --- zerver/models.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/zerver/models.py b/zerver/models.py index 37644c7d0e..fcbdff3259 100644 --- a/zerver/models.py +++ b/zerver/models.py @@ -389,11 +389,18 @@ class Recipient(models.Model): class Client(models.Model): name = models.CharField(max_length=30, db_index=True, unique=True) +get_client_cache = {} +def get_client(name): + if name not in get_client_cache: + result = get_client_memcached(name) + get_client_cache[name] = result + return get_client_cache[name] + def get_client_cache_key(name): return 'get_client:%s' % (make_safe_digest(name),) @cache_with_key(get_client_cache_key, timeout=3600*24*7) -def get_client(name): +def get_client_memcached(name): (client, _) = Client.objects.get_or_create(name=name) return client