Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Недостаточный контроль за инвалидацией: можно инвалидировать объект, можно инвалидировать все объекты модели, больше ничего.
Плюс, инвалидация только через удаление записи в кэше, что не всегда является лучшим решением (о чем я пишу в посте).
Что ещё нужно-то? :-)
created == True, можно не инвалидировать часть ключей. Например, условно, топ100 статей за все время, свежесозданная статья туда не попадет. Есть и еще ряд проверок, которые могут оказаться очень полезными, чтобы не делать сложные выборки.По-моему, Вы как раз и пишете, что обновлять данные в кеше не стоит, т.к. операция неатомарная.
cache.delete(key) на cache.set(key, instance), если instance передается в сигнал.CACHEOPS = {
'auth.user': ('get', 60*15, {'cache_on_save': True}),
'people.userprofile': ('get', 60*15, {'cache_on_save': 'user'}),
}
class Cacheable(object):
def cleanup(self):
cache.delete(':'.join([self.__class__.__name__, self.id]))
class AwesomeUser(models.Model, DirtyFieldsMixin, Cacheable):
name = models.CharField()
surname = models.CharField()
awesomeness = models.BigIntegerField()
def do_stuff(self):
# Does some awesome stuff
return
def save(self, *args, **kwargs):
# Processing
self.do_stuff()
# Gets modified fields
is_dirty = set(self.get_dirty_fields().keys()) \
& set(['awesomeness', 'name'])
super(AwesomeUser, self).save(*args, **kwargs)
# If got dirty
if is_dirty:
self.cleanup()
# do other stuff
Как именовать ключи?как известно, в CS есть только две трудные вещи. :)
Инвалидация
For example if you update a post in a particular category, this strategy will expire all the keys for all the categories.
Еще о кэшировании в Django