使用Redis字符串列表避免竞争情况

时间:2020-07-21 05:34:51

标签: redis

我在Redis中有一个哈希,我们称之为myHash。 myHash包含3个字段:myList,myHour和myMean。伪代码的工作方式如下:

Stack values = parseList(myList)
if currentHour === myHour:
      x = values.pop()
      x+=1
      values.push(x)
else:
     values.add(1)

mean = sum(values)
//Then stringify list, and store new list in myList, 
//store currentHour in myHour, and the new mean in myMean

一个请求将进入,我们根据Redis中已经存储的内容检查该请求的当前时间,如果相同,则需要增加堆栈中的最新值,如果不相同,则需要添加另一个小时,只需在堆栈中加1。然后,我们采取卑鄙的态度,并将一切推回Redis。

我的问题是,当我的程序正在运行多个线程时,此方法可能会产生竞争条件。获取数据并进行递增操作可能会导致争用情况,因为一个线程将获得该列表,但是该列表可能已经由其他某个线程获得,但尚未设置。有没有办法确保值中的每个请求都相应地更新?我也在用Jedis。

0 个答案:

没有答案