无法在 spring-data-redis 中创建事务(没有正在进行的事务。您是否忘记调用 multi?)

问题描述 投票:0回答:1

我有用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

有什么想法可能是什么问题或者我该如何调试它?

java spring redis spring-data-redis
1个回答
0
投票

与其直接在

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();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.