springboot&redis list-redis list多线程问题

q1qsirdb  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(421)
@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。在这个原始队列的末尾,然后继续取值​​从排队开始,应该做些什么来避免这种情况?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题