Максимальный размер значения для Redis - PullRequest
0 голосов
/ 26 апреля 2020

Я пытался сделать систему воспроизведения. Таким образом, в основном, когда игрок движется, система сохраняет его данные (движения, местоположение, анимация и т. Д. c.) В файл JSON. В конце записи размер файла JSON может превышать 50 МБ . Я хотел бы сохранить эти данные в Redis с датой истечения (24-48 часов).

Мои вопросы;

  1. Это плохо для сохранения более 50 МБ в Redis с датой истечения срока действия?
  2. Сколько данных, которые более 50 МБ может обработать Redis без потери производительности?
  3. Если игроки делают 500 записей за 48 часов, может ли это быть плохо для Redis ?
  4. Сколько миллисекунд занимает 50 МБ данных от Redis со средним VDS / VPS?

1 Ответ

0 голосов
/ 26 апреля 2020

Хранение большого объекта (с точки зрения размера) не является хорошей практикой. Вы можете прочитать это из здесь . Одной из проблем является сеть. Вам необходимо отправить 50 МБ полезной нагрузки на сервер Redis за один вызов. Кроме того, если вы сохраняете их как один большой объект, то при извлечении и обновлении его (одно поле, элемент и т. Д. c) вам необходимо получить 50 МБ обратно с сервера и проанализировать его, чтобы получить одно поле, обновить его до конца отправить обратно на сервер. Это серьезная проблема с точки зрения сети.

Вместо redis strings вы можете предпочесть sorted sets или lists в зависимости от вашего варианта использования. Если вы собираетесь хранить их с временными метками и получать диапазон событий между этими временными метками, то sorted sets может быть идеальным решением для вас. Это хорошо для нумерации страниц и др. c. Одним из решающих недостатков является сложность добавления нового элемента O(log(N)).

lists также может обеспечить хорошую игровую площадку для вашего случая. Вы можете использовать LPUSH / RPU SH для добавления новых событий в ваш список, и, поскольку Redis lists реализованы с помощью linked lists, то при добавлении сообщения в начало или конец списка то же самое, O(1), что отлично.

Всякий раз, когда происходит событие, вы либо звоните zadd, либо RPUSH / LPUSH, чтобы отправить события в redis. Если вам нужно запросить их, вы можете использовать доступные функции, такие как ZRANGEBYSCORE или LRANGE в зависимости от вашего выбора.

При разработке ваших ключей вы можете использовать такой идентификатор, как идентификатор пользователя, как вы упомянули в комментариях. У вас не будет проблем со списками / отсортированными наборами, как у вас будет в strings. Но выбор наиболее подходящего варианта зависит от вашего варианта использования для чтения / записи или бизнес-правил.

Вот несколько полезных ссылок для чтения;

Redis intro data intro

типы данных Redis

Redis лабораторная документация о типах данных

...