通过 RedisTemplate 单次访问获取多个缓存值

使用 redisTemplate 尝试通过单次访问 Redis 获取多个数据时,使用了 multiexec 方法。但在运行时报了如下错误:

io.lettuce.core.RedisCommandExecutionException: ERR EXEC without MULTI

代码如下:

redisTemplate.multi();
for (String key : keys) {
    hmget(key);
}
List<Object> result = redisTemplate.exec();
return result;
  

根据 StackOverflow 上的回答,需要调用 redisTemplate.setEnableTransactionSupport(true) 方法来开启事务。

修改后代码如下:

redisTemplate.setEnableTransactionSupport(true);
redisTemplate.multi();
for (String key : keys) {
    hmget(key);
}
List<Object> result = redisTemplate.exec();
redisTemplate.setEnableTransactionSupport(false);
return result;
  

2023/05/07 追记

新的参考写法如下:

try {
    stringRedisTemplate.setEnableTransactionSupport(true);
    stringRedisTemplate.multi();

    // do some redis operations

    stringRedisTemplate.exec();
} catch (Exception ex) {
    stringRedisTemplate.discard();
} finally {
    stringRedisTemplate.setEnableTransactionSupport(false);
}