【问题标题】:Get Data From Redis in batch RedisTemplate从 Redis 批量获取数据 RedisTemplate
【发布时间】:2017-06-17 21:45:49
【问题描述】:

我在我的 spring boot 应用程序中使用 RedisTemplate,我可以使用 singleKey 进行读取。

String valueJson = (String) redisTemplate.opsForValue().get(setKey(someId));

我现在有一个“someId”列表,例如“List someIds”,我想获取所有 Id 的数据。当然,我可以在列表上进行迭代并使用单独的键点击 redis,但我不希望这样,而是我想提供整个列表以一次性获得响应。

请帮忙。

【问题讨论】:

  • 根据底层数据类型,有诸如MGETHMGET 之类的批量命令可以从哈希中读取多个键(字符串)或条目。否则,就像 Thomas 写的那样,使用流水线发出多个命令并在最后进行同步。

标签: java spring redis


【解决方案1】:

你需要使用流水线:https://redis.io/topics/pipelining

List<Object> results = redisTemplate.executePipelined(
  new RedisCallback<Object>() {
    public Object doInRedis(RedisConnection connection) throws DataAccessException {
      StringRedisConnection stringRedisConn = (StringRedisConnection)connection;
      for(String id:someIds) 
        stringRedisConn.get(id);

    return null;
  }
});

或者在 Java 8 中:

List<Object> results = redisTemplate.executePipelined((RedisCallback<Object>) connection -> {
    StringRedisConnection stringRedisConn = (StringRedisConnection) connection;

    someIds.forEach(id -> {
        stringRedisConn.get(id);
    });

    return null;
});

结果列表将包含您想要的所有内容。

【讨论】:

  • 不值得,目前(版本 2.9.0),在尝试使用集群执行流水线时,Jedis 将抛出:UnsupportedOperationException: Pipeline is currently not supported for JedisClusterConnection
猜你喜欢
  • 2016-02-28
  • 2015-10-15
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 2020-04-19
  • 1970-01-01
相关资源
最近更新 更多