За последние 24 часа нас посетили 20511 программистов и 1823 робота. Сейчас ищут 987 программистов ...

Нужна помощь с Redis

Тема в разделе "Прочие вопросы по PHP", создана пользователем cloud4, 5 дек 2014.

  1. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Уважаемые форумчане, подскажите пожалуйста!
    Нужно реализовать систему хранения очков пользователей в игре и рейтинги на базе Redis (http://redis.io/).
    Под рейтингом здесь понимается список игроков, сортированный по убыванию количества очков (игрок1 - 666, игрок2 - 13, игрок3 - 0 и пр.).
    Виды рейтингов:
    - за день
    - за месяц
    - за год

    Необходимый функционал:
    1. Добавить/обновить очки пользователя в рейтинг.
    2. Показать рейтинг пользователей любого типа с поддержкой постраничного вывода (aka pagination).
    3. Удалить нехорошего читера из рейтинга.
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
  3. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    ZREVRANK - с помощью этого параметра?
     
  4. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    ZREVRANK - это его место в рейтинге будет
    Топ 10 будет ZREVRANGE key 0 10
    и т.д... в общем там все просто и с примерами
     
  5. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    А как мне создать базу с количеством игроков 5 * 10 ^ 7?

    Добавлено спустя 53 секунды:
    И еще вопрос, на каком фреймворке это делать, и нужен ли фреймворк вообще?
    Подойдет ли Webasyst?
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    В редисе не нужно создавать базу.
    Но следует учитывать, что вся база редиса должна вмещаться в оперативную память.
    Просто ZADD и вперед

    Добавлено спустя 2 минуты 33 секунды:
    На чем хотите, на том и делайте.
    У вас должна быть библиотека взаимодействия с редисом
    http://redis.io/clients - выбирайте, какой там вам нравится для PHP. Можно просто модуль поставить (pecl).
     
  7. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Мне нужно это все сделать на PHP.
    Я поставил на комп Denwer 3 и подключил к нему библиотеки PHP 5.3.13.

    Добавлено спустя 2 минуты 4 секунды:
    Желательно все то дело сделать с помощью Yii 2 но я не разобрался с его установкой.
    Через обычную cmd не устанавливается, нужен какой-нибудь сторонний консольный терминал.
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.120
    Симпатии:
    1.245
    Адрес:
    там-сям
    какой терминал? фреймворк ставится через композер, командной строки в cmd достаточно.

    но если захочешь что-то *nix подобное внутри винды, то поставь cygwin. я пользуюсь и очень доволен.
     
  9. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    В общем, как я понял я записываю все данные в редис, и потом создаю пхп-приложение которое будет выполнять эти 3 действия?
     
  10. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Да, всё так
     
  11. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Ребята, кто возьмется помочь мне воплотить это в жизнь?
    Я еще не особо свободно "плаваю" в данном языке.
    У кого будет свободное время, которое не жалко потратить на это, буду ждать.
    Кто сможет, добавьте в друзья, пожалуйста:)
    У меня Deadline на все это до конца воскресенья.
    Всем ответившим здесь большое спасибо. И заранее спасибо тем кто откликнется.
     
  12. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    При попытке добавления очков рейтинга пользователям
    Код (Text):
    1. sadd players:igor kola john vova
    2. (integrer) 3
    3. zadd players:igor 100 kola 95 john 90 vova 80
    4. ERR syntax error
    выскакивает ERR syntax error.
    В чем может быть проблема?
     
  13. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    А ты понимаешь что ты делаешь?
    Напиши по пунктам, что хочешь сделать, и укажи на коком возникает ошибка с какими входными данными и текстом ошибки.
     
  14. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Сначала, я добавлю нескольких пользователей.
    Потом с помощью ключа ZADD пытаюсь добавить очки рейтинга в значeния igor kola john vova.
    При добавлении очков выдает ошибку ERR syntax error.
    В заголовке темы написано что мне нужно сделать. Может я что-то не так делаю?
     
  15. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
  16. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Сверил, я их оттуда и брал.
     
  17. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Хорошо, распиши мне, что значит каждое слово в твоей команде.
     
  18. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Код (Text):
    1. sadd players
    Добавление множества (в моем случае игроков).
    Код (Text):
    1. zadd players
    Упорядочивание множества по критерию рейтинга.
     
  19. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    http://redis.io/commands/ZADD
    ZADD key score member [score member ...]

    ты нарушил score member, у тебя в команде последняя цифра 80, но нет member для неё, по этому и пишут что ошибка в синтаксисе
     
  20. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    https://github.com/matsubo/redis-ranking/blob/master/sample/usecase.php
    А как мне поставить количество своих игроков например 100?
    Как создать 3 списка по сортировке:
    -день;
    -месяц;
    -год.

    Добавлено спустя 2 минуты 21 секунду:
    И какая библиотека нужна для этого кода, что бы он заработал с Redis-ом?
     
  21. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    По ссылке пример использование библиотеки https://github.com/matsubo/redis-ranking
    Что значит 100? Там же есть пример выборки для ТОП 2: var_dump($ranking->getRange(0, 1, true));
    Что за сортировка по дням и т.д. ?
     
  22. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0
    Виды рейтингов:
    - за день
    - за месяц
    - за год
     
  23. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Так какую теорию ты уже прочитал по организации выборки по времени для redis?
     
  24. cloud4

    cloud4 Новичок

    С нами с:
    5 дек 2014
    Сообщения:
    13
    Симпатии:
    0