Скажите мне, как я могу исправить эту ошибку.
"Cannot use Jedis when in Multi. Please use Transaction or reset jedis state".
Я не совсем понимаю, где и что именно не так в коде.
Я также следую двум правилам, чтобы все работало. Но это не помогает.
1)Переместите все операции, выполняемые с помощью jedis в пределах этого диапазона, с начала транзакции до конца транзакции за пределы этого диапазона.
2)Примечание: Метод get объекта Response должен быть вызван после выполнения метода transaction exec. Перед выполнением метода t.exec() объект Response не содержит результата.
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.Response;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.JedisPool;
JedisPool jedisPool = (JedisPool) props.get('jedisPool');
Jedis jedis = jedisPool.getResource();
List<Object> execResult = null;
String profileCase;
int countTry = 0;
while(execResult == null) {
try{
jedis.watch("Delete_Choice");
Transaction t = jedis.multi();
Response<String> rs = t.rpoplpush("Delete_Choice", "Delete_Choice");
execResult = t.exec();
profileCase = rs.get();
t.close();
t = null;
rs = null;
} catch (Exception e){
countTry++;
sleep(50);
if(countTry > 15){
log.error("\r\nSome error (countTry = " + countTry + ") Delete_Choice: " + e.getMessage() + "\r\n");
}
} finally {
if(!jedis.isBroken())
//jedisPool.returnResource(jedis);
jedis.close();
}
}
execResult.clear();
vars.put("Delete_Choice_JM", profileCase);
//jedisPool.returnResource(jedis);
jedis = null;
jedisPool = null;
profileCase = null;