У меня есть разбитый на страницы форум Django, где сообщения пользователей накапливаются в соответствии с последним временем публикации. Я показываю 20 сообщений на странице. В пиковое время новый пост сохраняется каждые ~ 2 секунды, тогда как страницы запрашиваются для просмотра до 11 раз в секунду.Использование кэширования для первой страницы разбитого на страницы вида в Django
Я хочу уменьшить удары БД путем введения кэширования. Я заметил, что большая часть трафика попадает на первую страницу, так что это тот, который я хочу кэшировать. По сути, я планирую до set
первую страницу в кеше при каждой записи и get
, когда зрители хотят ее использовать. У меня есть опции redis
и memcache
в качестве кеша.
Мой вопрос заключается в том, как кэшировать и обслуживать только на первой странице. Мой незашифрованный код выглядит следующим образом:
#object_list has up to 1000 object ids at a time
paginator = Paginator(object_list, 20) #pass list of obj ids & no. of objs/page
page = request.GET.get('page', '1')
try:
page = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
page = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
page = paginator.page(paginator.num_pages)
page_contents = retrieve_posts(page.object_list) #retrieve 20 objects
Эй, там! Я попробую и вернусь к вам с точными критериями и т. Д. Действительно, недействительность кэша может быть узким местом здесь. Мне было интересно, подходят ли memcached или redis для микрокашинга такого типа. –
memcached, вероятно, лучше – e4c5
Так как это многопоточность, может ли быть какой-либо риск условий гонки в этом конкретном сценарии? –