我有多个线程,并且正在更新Redis中的条目。为了避免同时更新相同的值,我尝试使用multi()
事务块。
RedisAsyncCommands<String, String> redisAsyncCommands = redisConnection.async();
这是我初始化连接的方式。
this.redisAsyncCommands.multi();
RedisFuture<List<String>> getResult = this.redisAsyncCommands.mget(keys);
List<String> productJsons = getResult.get(redisFlushTimeOut, TimeUnit.SECONDS);
System.out.println(productJsons.toString());
// update process....
// Execute all commands issued after MULTI
RedisFuture<List<Object>> insertResult =
this.redisAsyncCommands.exec();
RedisCommandResult redisCommandResult = new RedisCommandResult();
redisCommandResult.setResultList(insertResult.get(redisFlushTimeOut, TimeUnit.SECONDS));
return redisCommandResult;
这就是我尝试从redis获取条目并使用multi()
更新它的方式。这给了我TimeoutException
。但是删除multi()
和exec()
之后,一切正常。但是我认为使用多线程会影响它。请帮助我在multi()/中使用mget()/或给我一种更好的方法。