在生菜的multi()事务块中使用mget()

时间:2018-07-31 10:00:37

标签: java redis transactions lettuce

我有多个线程,并且正在更新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()/或给我一种更好的方法。

0 个答案:

没有答案