add cache keys

This commit is contained in:
Laura Klünder 2017-07-05 23:38:47 +02:00
parent 6406950263
commit 00a2366ae2
2 changed files with 25 additions and 8 deletions

View file

@ -6,6 +6,8 @@ from django.apps import apps
from django.conf import settings from django.conf import settings
from django.db import models, transaction from django.db import models, transaction
from django.urls import reverse from django.urls import reverse
from django.utils.http import int_to_base36
from django.utils.timezone import make_naive
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy from django.utils.translation import ungettext_lazy
from rest_framework.exceptions import PermissionDenied from rest_framework.exceptions import PermissionDenied
@ -410,10 +412,18 @@ class ChangeSet(models.Model):
{'num': self.changed_objects_count}) {'num': self.changed_objects_count})
@property @property
def cache_key(self): def updates_cache_key(self):
if self.pk is None: pk, mapupdate = MapUpdate.last_update()
return None last_update = self.created if self.last_update_id is None else self.last_update.datetime
return str(self.pk)+'-'+str(self.last_change) return (MapUpdate.cache_key() + '_' + int_to_base36(self.last_update_id or 0) + '_' +
int_to_base36(int(make_naive(last_update).timestamp())))
@property
def changes_cache_key(self):
pk, mapupdate = MapUpdate.last_update()
last_change = self.created if self.last_change_id is None else self.last_change.datetime
return (MapUpdate.cache_key() + '_' + int_to_base36(self.last_change_id or 0) + '_' +
int_to_base36(int(make_naive(last_change).timestamp())))
def get_absolute_url(self): def get_absolute_url(self):
if self.pk is None: if self.pk is None:

View file

@ -3,6 +3,8 @@ from contextlib import contextmanager
from django.conf import settings from django.conf import settings
from django.core.cache import cache from django.core.cache import cache
from django.db import models, transaction from django.db import models, transaction
from django.utils.http import int_to_base36
from django.utils.timezone import make_naive
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -26,9 +28,14 @@ class MapUpdate(models.Model):
if last_update is not None: if last_update is not None:
return last_update return last_update
with cls.lock(): with cls.lock():
last_update = cls.objects.latest().datetime last_update = cls.objects.latest()
cache.set('mapdata:last_update', last_update, 900) cache.set('mapdata:last_update', (last_update.pk, last_update.datetime), 900)
return last_update return last_update.pk, last_update.datetime
@classmethod
def cache_key(cls):
pk, dt = cls.last_update()
return int_to_base36(pk)+'_'+int_to_base36(int(make_naive(dt).timestamp()))
@classmethod @classmethod
@contextmanager @contextmanager
@ -40,4 +47,4 @@ class MapUpdate(models.Model):
if self.pk is not None: if self.pk is not None:
raise TypeError raise TypeError
super().save(**kwargs) super().save(**kwargs)
cache.set('mapdata:last_update', self.datetime, 900) cache.set('mapdata:last_update', (self.pk, self.datetime), 900)