Сканирование набора повторов для определенных значений и создания и действия в очереди - PullRequest
0 голосов
/ 06 июня 2018

Я считаю, что использование Redis - лучший способ сделать то, что мне нужно, но, пожалуйста, исправьте меня, если я ошибаюсь.

Я открываю сокет для обмена и получаю стабильный поток цен на акцииоколо 1 на каждую «торговую пару» в секунду.

У меня есть пользователи, которые установили оповещения в MYSQL для уведомления, когда цена достигнет определенной цены.

Моя первая наивная идея была бысортировать оповещения для торговой пары и, когда я получаю новую цену из сокета, перебирать список оповещений в mysql и уведомлять всех пользователей, которых необходимо уведомить.

Это явно не сработает, поскольку это будет огромная нагрузка для плохого MYSQL.Поэтому моя идея состоит в том, чтобы использовать Redis и хранить предупреждения в Redis.

Хотя я не обладаю достаточным опытом в разработке Redis, и я изо всех сил пытаюсь найти решение.Сначала мне нужен какой-то отсортированный список или хэш, но я могу хранить только 1 часть информации в списке ...

Я считаю, что мне нужно хранить 3 части информации в базе данных:

1) «Торговая пара» (название списка)

2) Цена

3) Идентификатор записи наблюдателя в MYSQL, чтобы я мог уведомить их

Таким образом, я мог бы создать карту для каждого наблюдателя

watcher_(watcherID)

like:

watcher_3

    price : 8000

Затем создать набор с идентификаторами наблюдателя, такими как:

3,5,6

и вызывать сортировку по убыванию с помощью «Сортировка по внешнему виду».keys "

Затем каким-то образом зациклите это, используя SCAN и MATCH, пока я не достигну цены, которая меньше или равна текущей цене, и не переместу ее в новую очередь.

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

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

Может кто-нибудь посоветовать мне, если подход абовМы бы сработали, или если есть лучший подход?

1 Ответ

0 голосов
/ 07 июня 2018

Похоже, вы могли бы использовать отсортированный набор и паб-саб.Используйте имя вашей пары и lt / gt как часть ключа.Цена - это оценка товара, а идентификатор наблюдателя - данные товара.Затем, когда приходит цитата, вы звоните ZRANGEBYSCORE, чтобы узнать, какой наблюдатель должен быть вызван.

Так, например, у вас есть эти наблюдатели (> = 100,> = 150, <= 200): </p>

127.0.0.1:6370> zadd watchers:usdeur:gt 100 1
(integer) 1
127.0.0.1:6370> zadd watchers:usdeur:gt 150 2
(integer) 1
127.0.0.1:6370> zadd watchers:usdeur:lt 200 3
(integer) 1

И приходит цитата 'usdeur: 130':

127.0.0.1:6370> ZRANGEBYSCORE watchers:usdeur:lt 130 +inf
1) "3"
127.0.0.1:6370> ZRANGEBYSCORE watchers:usdeur:gt -inf 130
1) "1"

Теперь вы можете немедленно обработать эти наблюдатели или отправить сообщение на канал pubsub для обработки другими работниками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...