jenkins-bot has submitted this change and it was merged. Change subject: Add proper caching for User model ......................................................................
Add proper caching for User model - JSON is serialization format - Uses redis Change-Id: Ib96a5c407864619bd224f96108c1eaa21d7e582f --- M quarry/web/app.py M quarry/web/models/user.py 2 files changed, 33 insertions(+), 1 deletion(-) Approvals: Legoktm: Looks good to me, approved jenkins-bot: Verified diff --git a/quarry/web/app.py b/quarry/web/app.py index 5f122d0..bf7ec17 100644 --- a/quarry/web/app.py +++ b/quarry/web/app.py @@ -7,6 +7,7 @@ import json import time import os +import redis from celery import Celery from celery.exceptions import SoftTimeLimitExceeded @@ -119,10 +120,19 @@ @app.before_request def setup_context(): + setup_redis() setup_db() setup_user() +def setup_redis(): + g.redis = redis.StrictRedis( + host=app.config['REDIS_HOST'], + port=app.config['REDIS_PORT'], + db=app.config['REDIS_DB'] + ) + + def setup_replica(): g.replica = pymysql.connect( host=app.config['REPLICA_HOST'], diff --git a/quarry/web/models/user.py b/quarry/web/models/user.py index a435217..0fc3e2a 100644 --- a/quarry/web/models/user.py +++ b/quarry/web/models/user.py @@ -1,4 +1,5 @@ from flask import g +import json class User(object): @@ -6,8 +7,26 @@ self.id = id self.username = username + def to_json(self): + return json.dumps({ + 'id': self.id, + 'username': self.username + }) + + @classmethod + def from_json(cls, json_data): + data = json.loads(json_data) + return cls(data['id'], data['username']) + + @staticmethod + def get_cache_key(id): + return 'user:id:%s' % (id, ) + @classmethod def get_by_id(cls, id): + user_data = g.redis.get(cls.get_cache_key(id)) + if user_data: + return User.from_json(user_data) try: cur = g.conn.cursor() cur.execute( @@ -19,7 +38,9 @@ cur.close() if result is None: return None - return cls(result[0], result[1]) + user = cls(result[0], result[1]) + g.redis.set(cls.get_cache_key(id), user.to_json()) + return user def save(self): try: @@ -29,5 +50,6 @@ ON DUPLICATE KEY UPDATE username=%s""", (self.id, self.username, self.username) ) + g.redis.delete(User.get_cache_key(self.id)) finally: cur.close() -- To view, visit https://gerrit.wikimedia.org/r/150220 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ib96a5c407864619bd224f96108c1eaa21d7e582f Gerrit-PatchSet: 1 Gerrit-Project: analytics/quarry/web Gerrit-Branch: master Gerrit-Owner: Yuvipanda <yuvipa...@gmail.com> Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com> Gerrit-Reviewer: Yuvipanda <yuvipa...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits