我有用connectionFactory初始化的redisTemplate并启用了事务支持。问题是
redisTemplate.multi();
似乎没有创建交易。
redisTemplate.multi();
redisTemplate.opsForValue().multiGet(Arrays.asList( "test"));
redisTemplate.exec();
无论我在 multi 和 exec 之间放置什么,exec 总是返回错误
org.springframework.dao.InvalidDataAccessApiUsageException: No ongoing transaction. Did you forget to call multi?
与 Redis 的连接有效,不涉及事务的查询有效。当我在 multi() 之后使用 Discard() 时,它会显示
org.springframework.data.redis.RedisSystemException: Unknown redis exception; nested exception is java.lang.IllegalStateException: Connection has no active transaction
有什么想法可能是什么问题或者我该如何调试它?
与其直接在
multi()
上调用 exec()
、RedisTemplate
和其他操作,通常最好将 execute(
) 方法与 SessionCallback
一起使用。这可确保所有操作都在同一连接上执行。
public void performTransaction() {
try {
redisTemplate.execute(new SessionCallback<List<Object>>() {
@Override
public List<Object> execute(RedisOperations operations) throws DataAccessException {
operations.multi();
operations.opsForValue().multiGet(Arrays.asList("test"));
// Add more operations here
return operations.exec();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}