Scala Jedis mget传入数组

前言

在实现客户需求的时候遇到一个问题,需要在SparkStreaming 中关联一些维表 ,但是需要做到秒级运算,于是我想到把维表放到Redis中,在foreach中进行jedis.get的操作实在太慢了,于是我想到使用mget

Jedis源码
  @Override
  public List<String> mget(final String... keys) {
    return new JedisClusterCommand<List<String>>(connectionHandler, maxAttempts) {
      @Override
      public List<String> execute(Jedis connection) {
        return connection.mget(keys);
      }
    }.run(keys.length, keys);
  }

可以看到 mget需要我们传入的是多个String参数,而不是一个数组,所以我们传入数组会提示类型不匹配
于是可以使用这个方法

# array:Array[String]
jedis.mget(array: _*)

这样传入的就不是一个数组,而是这个数组枚举的所有成员参数
然而,在执行过程过遇到了这个问题:

No way to dispatch this command to Redis Cluster because keys have different slots.

这是因为Redis集群不支持mget对多个slots上的key进行同时获取,当然也是有办法解决的,我们只需要判断每个key的存放在哪个slots,对他们进行多叉树或者多维数组划分再依次mget就好了
但是我的初衷是为了减少get的效率问题,如果进行多次foreach操作 反而浪费更多的时间,所以redis这条路就走不通了

后言

测试之后证明直接把维表放到缓存到内存中join,效率更快,推荐使用这种方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值