Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
扫描redis集合中的特定值,并在队列中创建和执行操作_Redis - Fatal编程技术网

扫描redis集合中的特定值,并在队列中创建和执行操作

扫描redis集合中的特定值,并在队列中创建和执行操作,redis,Redis,我相信使用Redis是做我需要做的事情的最好方法,但是如果我错了,请纠正我 我打开一个交易所的插座,收到稳定的股票价格流,大约每“交易对”每秒1股 我有一些用户在MYSQL中设置了警报,当价格达到某个价位时会收到通知 我的第一个天真想法是对交易对的警报进行排序,当我从套接字收到新的价格时,在mysql中循环浏览警报列表,并通知任何需要通知的用户 这显然是行不通的,因为对于可怜的MYSQL来说,这将是一个巨大的工作量。所以我的想法是使用redis,并在redis中保存警报 不过,我在Redis开发

我相信使用Redis是做我需要做的事情的最好方法,但是如果我错了,请纠正我

我打开一个交易所的插座,收到稳定的股票价格流,大约每“交易对”每秒1股

我有一些用户在MYSQL中设置了警报,当价格达到某个价位时会收到通知

我的第一个天真想法是对交易对的警报进行排序,当我从套接字收到新的价格时,在mysql中循环浏览警报列表,并通知任何需要通知的用户

这显然是行不通的,因为对于可怜的MYSQL来说,这将是一个巨大的工作量。所以我的想法是使用redis,并在redis中保存警报

不过,我在Redis开发方面并没有丰富的经验,我正在努力寻找解决方案。起初我需要某种排序的列表或散列,但我只能在一个列表中存储1条信息

我相信我需要在数据库中保存3条信息:

1) “交易对”(名单名称)

2) 代价

3) MYSQL中观察者记录的id,以便我可以通知他们

所以我可以为每个观察者创建一张地图

watcher_(watcherID)

like:

watcher_3

    price : 8000
然后创建一个具有观察者ID的集合,如:

3,5,6
并使用“按外部键排序”调用排序

然后使用SCAN和MATCH循环,直到我得到一个小于或等于当前价格的价格,并将其移动到一个新队列

如果我可以反复询问相同的问题,那么排序甚至没有必要

即使只是简单地通过使用Redis来思考这个问题,也会让我感到非常痛苦,我甚至不确定我是否正确地处理了这个问题


有谁能告诉我上述方法是否有效,或者是否有更好的方法

看起来您可以使用排序集和发布订阅。请使用您的对名称和lt/gt作为密钥的一部分。价格是物品的分数,观察者id是物品的数据。然后,当一个报价出现时,您可以调用
ZRANGEBYSCORE
,以获取应该调用哪个观察者


例如,你有这些观察者(>=100,>=150,如果观察者说“价格高于500时通知”,然后是501报价,然后是502报价,它会通知两次吗?
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
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"