Кэширование сообщений в мессенджере

155
01 февраля 2020, 10:20

Делаю свой мессенджер в целях самообучение, сделал рабочий прототип с базовыми возможностями. Далее встал вопрос о экономии трафика и кэшировании сообщений пользователей.

Клиент получает сообщения через REST API с тремя параметрами:
1. Идентификтор пользователя
2. Начало промежутка сообщений в количестве
3. Конец промежутка сообщений в количестве
Например: mysite.com/messages?user=vasya@mail.com&from=0&to=50 Значит, что я хочу получить 50 последних сообщений с переписки с пользователем "vasya@mail.com"

Отсюда выплывает три вопроса:
1. Какие есть способы кэширования данных такого типа?
2. Как потом определить надо ли мне скачивать сообщения с сервера, либо же брать из кэша (SQLite БД)?
3. Правильный ли я подход использую выкачивая сообщения из REST API, либо же можно как то по другому, так, что бы удобней было кэшировать?

Спасибо.

Answer 1

Я советую следующий подход.

  1. Сервер назначает каждому сообщению номер из возрастающей последовательности.
  2. Клиент при обновлении находит сообщение с наибольшим номером и передает его серверу.
  3. Сервер находит все сообщения с большими номерами и возвращает клиенту.
Answer 2
  1. Кеширование в базу данных после получения с сервера
  2. Если у сообщений нет функционала редактирования, то можно сравнивать первый пришедший элемент с сервера с элементом из БД. Если они одинаковы - то все грузить из кеша
  3. Еще делают следующий образом:

    • Отправляем limit (количество сообщений, которое необходимо загрузить) и offset (с какого элемента необходимо грузить сообщения)

    • Увеличиваем offset на каждом последующем запросе, если нам есть что возвращать.

Например:

  • отправили limit: 10, offset: 0 - получили первые 10 элементов

  • отправили limit: 10, offset: 10 - получили элементы с 10 по 20

READ ALSO
UnsatisfiedLinkError при работе с javacpp FaceRecognizer

UnsatisfiedLinkError при работе с javacpp FaceRecognizer

При запуске приложения с классом FaceRecognizer появляется следующая ошибка

198
Получить данные с usb устройства java

Получить данные с usb устройства java

Вечер добрый, есть несколько устройств, которые проводят измерения и передают данные на пк (у каждого прибора своя программа)Необходимо с помощью...

277
Как отключить SLF4J или LOG4j логи в консоле?

Как отключить SLF4J или LOG4j логи в консоле?

Столкнулся с такой проблемой: Скачал библиотеку и установил ее, но при запуске таймера приложение выводит постоянно логи в консоль (вывод...

168
Не работает стиль css (Bootstrap + Spring)

Не работает стиль css (Bootstrap + Spring)

Я хочу через css сделать ограничения чтобы моя таблица не во всю длины была на JSP странице, так вот я написал код но он не работает может не правильно...

159