Время от времени учитывайте результаты кэширования.Затем вы можете определить приблизительное положение нужных вам элементов.
Для вашего примера пользователя, запрашивающего вторую страницу, используя ваш кеш, вы полагаете, что (на момент кеширования) точные результаты будут элементами # 20-50 из базы данных.и предметы № 30-50 из корма.Поскольку фид часто меняется, вы не можете просто читать одни и те же элементы и показывать их пользователю.Вместо этого вы можете прочитать дополнительные элементы, например, 10 с обеих сторон.Для выше, это были бы пункты # 10-60 из базы данных и # 20-60 из подачи.Используя дополнительные элементы и находя совпадения с кешем, вы сможете получить более точные результаты, чем при запросе одинаковых # 20-50 и # 30-50.
Таким образом, результаты не будут полностью точными, как вы позволите в "PS".Но чем чаще пользователи делают запросы, тем точнее будет ответ, поскольку каждый запрос будет немного обновлять кэш.Вам также потребуется реализовать отслеживание истечения срока действия кэша, если некоторые страницы не запрашивались пользователями в течение длительного времени и, следовательно, полностью устарели.
Возможной реализацией вышеперечисленного будет дополнительная таблица со строкой для каждогокомбинация "страница" - "тип сортировки".В вашем примере для 50 элементов на странице и всего 2000 элементов будет 40 строк для «сортировки по имени» и 40 строк для «сортировки по весу».Каждая строка содержит информацию о том, какие элементы из обоих источников были взяты в последний раз, когда была получена доступ к конкретной странице, и отметка времени последнего обновления этой информации.
PS Вы не публикуете какие-либо подробности, из-за которых трудно их опубликоватьболее конкретный ответ, но я надеюсь, что то, что я написал, поможет!