@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 оценивается несколькими потоками, тогда в это время она быстрее достигнет конца исходной очереди, но из-за к условию redisSize> size, он будет многократно принимать значения из списка redis.
Например: в начале есть 10 значений (1,2,3 ... 10) , поток занимает 1, поток b занимает 2, c поток занимает 3. Таким образом поток может достичь 10 быстрее. Что нужно сделать, чтобы избежать этой ситуации, в конце этой исходной очереди, а затем продолжить принимать значения с начала очереди?