我在redis中有一个用作队列的列表。我把元素推到左边,然后从右边弹出。来自不同用户的请求被推到队列中。我有一个goroutine池,它从队列(pop)中读取请求并处理它们。我希望一次只能处理每个用户ID的一个请求。我有一个readrequest()函数永远运行,它弹出一个有用户ID的请求。我需要每个用户的请求被处理的顺序,他们进来。我不知道该怎么实施。我需要每个用户ID的redis列表吗?如果是这样,我将如何循环处理所有列表中的请求?
for i:=0; i< 5; i++{
wg.Add(1)
go ReadRequest(&wg)
}
func ReadRequest(){
for{
//redis pop request off list
request:=MyRedisPop()
fmt.Println(request.UserId)
// only call Process if no other goroutine is processing a request for this user
Process(request)
time.sleep(100000)
}
wg.Done()
}
1条答案
按热度按时间6ioyuze21#
以下是无需创建多个redis列表即可使用的伪代码:
请注意,这只是一个伪代码,我还没有测试它是否工作。