@AutoWired
private RedisTemplate<String, String> redisTemplate;
public void method() {
Long redisSize = redisTemplate.opsForList().size(key);
long size = 0L;
while(redisSize > size) {
String str = (String) redisTemplate.opsForList().rightPop(key);
//do something
redisTemplate.opsForList().leftPush(Json.toJsonString(object));
}
}
在多线程操作(例如:时间任务线程,由控制器调用)中,redis队列由多个线程赋值,此时它会更快地到达原始队列的末尾,但由于redisize>size的条件,它会重复取值从redis列表中。
例如:开头有10个值(1,2,3…10),a线程取1,b线程取2,c线程取3。这样,一个线程可以更快地达到10。在这个原始队列的末尾,然后继续取值从排队开始,应该做些什么来避免这种情况?
暂无答案!
目前还没有任何答案,快来回答吧!