TracingRedisConnection implements RedisConnection { @Override public Long zInterStore(byte[] destKey, byte[]... sets) { return helper .doInScope(RedisCommand.ZINTERSTORE, destKey, () -> connection.zInterStore(destKey, sets)); } TracingRedisConnection(RedisConnection connection,
      TracingConfiguration tracingConfiguration); @Override RedisGeoCommands geoCommands(); @Override RedisHashCommands hashCommands(); @Override RedisHyperLogLogCommands hyperLogLogCommands(); @Override RedisKeyCommands keyCommands(); @Override RedisListCommands listCommands(); @Override RedisSetCommands setCommands(); @Override RedisScriptingCommands scriptingCommands(); @Override RedisServerCommands serverCommands(); @Override RedisStringCommands stringCommands(); @Override RedisZSetCommands zSetCommands(); @Override void close(); @Override boolean isClosed(); @Override Object getNativeConnection(); @Override boolean isQueueing(); @Override boolean isPipelined(); @Override void openPipeline(); @Override List<Object> closePipeline(); @Override boolean isSubscribed(); @Override Subscription getSubscription(); @Override RedisSentinelConnection getSentinelConnection(); @Override Object execute(String command, byte[]... args); @Override Boolean exists(byte[] key); @Override Long exists(byte[]... keys); @Override Long del(byte[]... keys); @Override Long unlink(byte[]... keys); @Override DataType type(byte[] key); @Override Long touch(byte[]... keys); @Override Set<byte[]> keys(byte[] pattern); @Override Cursor<byte[]> scan(ScanOptions options); @Override byte[] randomKey(); @Override void rename(byte[] sourceKey, byte[] targetKey); @Override Boolean renameNX(byte[] sourceKey, byte[] targetKey); @Override Boolean expire(byte[] key, long seconds); @Override Boolean pExpire(byte[] key, long millis); @Override Boolean expireAt(byte[] key, long unixTime); @Override Boolean pExpireAt(byte[] key, long unixTimeInMillis); @Override Boolean persist(byte[] key); @Override Boolean move(byte[] key, int dbIndex); @Override Long ttl(byte[] key); @Override Long ttl(byte[] key, TimeUnit timeUnit); @Override Long pTtl(byte[] key); @Override Long pTtl(byte[] key, TimeUnit timeUnit); @Override List<byte[]> sort(byte[] key, SortParameters params); @Override Long sort(byte[] key, SortParameters params, byte[] storeKey); @Override byte[] dump(byte[] key); @Override void restore(byte[] key, long ttlInMillis, byte[] serializedValue); @Override void restore(byte[] key, long ttlInMillis, byte[] serializedValue, boolean replace); @Override ValueEncoding encodingOf(byte[] key); @Override Duration idletime(byte[] key); @Override Long refcount(byte[] key); @Override byte[] get(byte[] key); @Override byte[] getSet(byte[] key, byte[] value); @Override List<byte[]> mGet(byte[]... keys); @Override Boolean set(byte[] key, byte[] value); @Override Boolean set(byte[] key, byte[] value, Expiration expiration, SetOption option); @Override Boolean setNX(byte[] key, byte[] value); @Override Boolean setEx(byte[] key, long seconds, byte[] value); @Override Boolean pSetEx(byte[] key, long milliseconds, byte[] value); @Override Boolean mSet(Map<byte[], byte[]> tuple); @Override Boolean mSetNX(Map<byte[], byte[]> tuple); @Override Long incr(byte[] key); @Override Long incrBy(byte[] key, long value); @Override Double incrBy(byte[] key, double value); @Override Long decr(byte[] key); @Override Long decrBy(byte[] key, long value); @Override Long append(byte[] key, byte[] value); @Override byte[] getRange(byte[] key, long begin, long end); @Override void setRange(byte[] key, byte[] value, long offset); @Override Boolean getBit(byte[] key, long offset); @Override Boolean setBit(byte[] key, long offset, boolean value); @Override Long bitCount(byte[] key); @Override Long bitCount(byte[] key, long begin, long end); @Override List<Long> bitField(byte[] key, BitFieldSubCommands subCommands); @Override Long bitOp(BitOperation op, byte[] destination, byte[]... keys); @Override Long bitPos(byte[] key, boolean bit, org.springframework.data.domain.Range<Long> range); @Override Long strLen(byte[] key); @Override Long rPush(byte[] key, byte[]... values); @Override Long lPush(byte[] key, byte[]... values); @Override Long rPushX(byte[] key, byte[] value); @Override Long lPushX(byte[] key, byte[] value); @Override Long lLen(byte[] key); @Override List<byte[]> lRange(byte[] key, long start, long end); @Override void lTrim(byte[] key, long start, long end); @Override byte[] lIndex(byte[] key, long index); @Override Long lInsert(byte[] key, Position where, byte[] pivot, byte[] value); @Override void lSet(byte[] key, long index, byte[] value); @Override Long lRem(byte[] key, long count, byte[] value); @Override byte[] lPop(byte[] key); @Override byte[] rPop(byte[] key); @Override List<byte[]> bLPop(int timeout, byte[]... keys); @Override List<byte[]> bRPop(int timeout, byte[]... keys); @Override byte[] rPopLPush(byte[] srcKey, byte[] dstKey); @Override byte[] bRPopLPush(int timeout, byte[] srcKey, byte[] dstKey); @Override Long sAdd(byte[] key, byte[]... values); @Override Long sRem(byte[] key, byte[]... values); @Override byte[] sPop(byte[] key); @Override List<byte[]> sPop(byte[] key, long count); @Override Boolean sMove(byte[] srcKey, byte[] destKey, byte[] value); @Override Long sCard(byte[] key); @Override Boolean sIsMember(byte[] key, byte[] value); @Override Set<byte[]> sInter(byte[]... keys); @Override Long sInterStore(byte[] destKey, byte[]... keys); @Override Set<byte[]> sUnion(byte[]... keys); @Override Long sUnionStore(byte[] destKey, byte[]... keys); @Override Set<byte[]> sDiff(byte[]... keys); @Override Long sDiffStore(byte[] destKey, byte[]... keys); @Override Set<byte[]> sMembers(byte[] key); @Override byte[] sRandMember(byte[] key); @Override List<byte[]> sRandMember(byte[] key, long count); @Override Cursor<byte[]> sScan(byte[] key, ScanOptions options); @Override Boolean zAdd(byte[] key, double score, byte[] value); @Override Long zAdd(byte[] key, Set<Tuple> tuples); @Override Long zRem(byte[] key, byte[]... values); @Override Double zIncrBy(byte[] key, double increment, byte[] value); @Override Long zRank(byte[] key, byte[] value); @Override Long zRevRank(byte[] key, byte[] value); @Override Set<byte[]> zRange(byte[] key, long start, long end); @Override Set<byte[]> zRevRange(byte[] key, long start, long end); @Override Set<Tuple> zRevRangeWithScores(byte[] key, long start, long end); @Override Set<Tuple> zRangeWithScores(byte[] key, long start, long end); @Override Set<byte[]> zRangeByScore(byte[] key, double min, double max); @Override Set<byte[]> zRangeByScore(byte[] key, double min, double max, long offset, long count); @Override Set<byte[]> zRangeByScore(byte[] key, String min, String max); @Override Set<byte[]> zRangeByScore(byte[] key, Range range); @Override Set<byte[]> zRangeByScore(byte[] key, String min, String max, long offset, long count); @Override Set<byte[]> zRangeByScore(byte[] key, Range range, Limit limit); @Override Set<Tuple> zRangeByScoreWithScores(byte[] key, Range range); @Override Set<Tuple> zRangeByScoreWithScores(byte[] key, double min, double max); @Override Set<Tuple> zRangeByScoreWithScores(byte[] key, double min, double max, long offset,
      long count); @Override Set<Tuple> zRangeByScoreWithScores(byte[] key, Range range, Limit limit); @Override Set<byte[]> zRevRangeByScore(byte[] key, double min, double max); @Override Set<byte[]> zRevRangeByScore(byte[] key, Range range); @Override Set<byte[]> zRevRangeByScore(byte[] key, double min, double max, long offset, long count); @Override Set<byte[]> zRevRangeByScore(byte[] key, Range range, Limit limit); @Override Set<Tuple> zRevRangeByScoreWithScores(byte[] key, double min, double max); @Override Set<Tuple> zRevRangeByScoreWithScores(byte[] key, double min, double max, long offset,
      long count); @Override Set<Tuple> zRevRangeByScoreWithScores(byte[] key, Range range); @Override Set<Tuple> zRevRangeByScoreWithScores(byte[] key, Range range, Limit limit); @Override Long zCount(byte[] key, double min, double max); @Override Long zCount(byte[] key, Range range); @Override Long zCard(byte[] key); @Override Double zScore(byte[] key, byte[] value); @Override Long zRemRange(byte[] key, long start, long end); @Override Long zRemRangeByScore(byte[] key, double min, double max); @Override Long zRemRangeByScore(byte[] key, Range range); @Override Long zUnionStore(byte[] destKey, byte[]... sets); @Override Long zUnionStore(byte[] destKey, Aggregate aggregate, int[] weights, byte[]... sets); @Override Long zUnionStore(byte[] destKey, Aggregate aggregate, Weights weights, byte[]... sets); @Override Long zInterStore(byte[] destKey, byte[]... sets); @Override Long zInterStore(byte[] destKey, Aggregate aggregate, int[] weights, byte[]... sets); @Override Long zInterStore(byte[] destKey, Aggregate aggregate, Weights weights, byte[]... sets); @Override Cursor<Tuple> zScan(byte[] key, ScanOptions options); @Override Set<byte[]> zRangeByLex(byte[] key); @Override Set<byte[]> zRangeByLex(byte[] key, Range range); @Override Set<byte[]> zRangeByLex(byte[] key, Range range, Limit limit); @Override Boolean hSet(byte[] key, byte[] field, byte[] value); @Override Boolean hSetNX(byte[] key, byte[] field, byte[] value); @Override byte[] hGet(byte[] key, byte[] field); @Override List<byte[]> hMGet(byte[] key, byte[]... fields); @Override void hMSet(byte[] key, Map<byte[], byte[]> hashes); @Override Long hIncrBy(byte[] key, byte[] field, long delta); @Override Double hIncrBy(byte[] key, byte[] field, double delta); @Override Boolean hExists(byte[] key, byte[] field); @Override Long hDel(byte[] key, byte[]... fields); @Override Long hLen(byte[] key); @Override Set<byte[]> hKeys(byte[] key); @Override List<byte[]> hVals(byte[] key); @Override Map<byte[], byte[]> hGetAll(byte[] key); @Override Cursor<Entry<byte[], byte[]>> hScan(byte[] key, ScanOptions options); @Override Long hStrLen(byte[] key, byte[] field); @Override void multi(); @Override List<Object> exec(); @Override void discard(); @Override void watch(byte[]... keys); @Override void unwatch(); @Override Long publish(byte[] channel, byte[] message); @Override void subscribe(MessageListener listener, byte[]... channels); @Override void pSubscribe(MessageListener listener, byte[]... patterns); @Override void select(int dbIndex); @Override byte[] echo(byte[] message); @Override String ping(); @Override void bgWriteAof(); @Override void bgReWriteAof(); @Override void bgSave(); @Override Long lastSave(); @Override void save(); @Override Long dbSize(); @Override void flushDb(); @Override void flushAll(); @Override Properties info(); @Override Properties info(String section); @Override void shutdown(); @Override void shutdown(ShutdownOption option); @Override Properties getConfig(String pattern); @Override void setConfig(String param, String value); @Override void resetConfigStats(); @Override Long time(); @Override void killClient(String host, int port); @Override void setClientName(byte[] name); @Override String getClientName(); @Override List<RedisClientInfo> getClientList(); @Override void slaveOf(String host, int port); @Override void slaveOfNoOne(); @Override void migrate(byte[] key, RedisNode target, int dbIndex, MigrateOption option); @Override void migrate(byte[] key, RedisNode target, int dbIndex, MigrateOption option,
      long timeout); @Override void scriptFlush(); @Override void scriptKill(); @Override String scriptLoad(byte[] script); @Override List<Boolean> scriptExists(String... scriptShas); @Override T eval(byte[] script, ReturnType returnType, int numKeys, byte[]... keysAndArgs); @Override T evalSha(String scriptSha, ReturnType returnType, int numKeys,
      byte[]... keysAndArgs); @Override T evalSha(byte[] scriptSha, ReturnType returnType, int numKeys,
      byte[]... keysAndArgs); @Override Long geoAdd(byte[] key, Point point, byte[] member); @Override Long geoAdd(byte[] key, GeoLocation<byte[]> location); @Override Long geoAdd(byte[] key, Map<byte[], Point> memberCoordinateMap); @Override Long geoAdd(byte[] key, Iterable<GeoLocation<byte[]>> locations); @Override Distance geoDist(byte[] key, byte[] member1, byte[] member2); @Override Distance geoDist(byte[] key, byte[] member1, byte[] member2, Metric metric); @Override List<String> geoHash(byte[] key, byte[]... members); @Override List<Point> geoPos(byte[] key, byte[]... members); @Override GeoResults<GeoLocation<byte[]>> geoRadius(byte[] key, Circle within); @Override GeoResults<GeoLocation<byte[]>> geoRadius(byte[] key, Circle within,
      GeoRadiusCommandArgs args); @Override GeoResults<GeoLocation<byte[]>> geoRadiusByMember(byte[] key, byte[] member,
      double radius); @Override GeoResults<GeoLocation<byte[]>> geoRadiusByMember(byte[] key, byte[] member,
      Distance radius); @Override GeoResults<GeoLocation<byte[]>> geoRadiusByMember(byte[] key, byte[] member,
      Distance radius, GeoRadiusCommandArgs args); @Override Long geoRemove(byte[] key, byte[]... members); @Override Long pfAdd(byte[] key, byte[]... values); @Override Long pfCount(byte[]... keys); @Override void pfMerge(byte[] destinationKey, byte[]... sourceKeys); @Override Long xAck(byte[] key, String group, RecordId... recordIds); @Override RecordId xAdd(MapRecord<byte[], byte[], byte[]> record); @Override Long xDel(byte[] key, RecordId... recordIds); @Override String xGroupCreate(byte[] key, String groupName, ReadOffset readOffset); @Override Boolean xGroupDelConsumer(byte[] key, Consumer consumer); @Override Boolean xGroupDestroy(byte[] key, String groupName); @Override Long xLen(byte[] key); @Override List<ByteRecord> xRange(byte[] key, org.springframework.data.domain.Range<String> range,
      Limit limit); @Override List<ByteRecord> xRead(StreamReadOptions readOptions, StreamOffset<byte[]>... streams); @Override List<ByteRecord> xReadGroup(Consumer consumer, StreamReadOptions readOptions,
      StreamOffset<byte[]>... streams); @Override List<ByteRecord> xRevRange(byte[] key, org.springframework.data.domain.Range<String> range,
      Limit limit); @Override Long xTrim(byte[] key, long count);  }
@Test public void invokingZInterStoreCreatesNewSpan() { commandCreatesNewSpan(RedisCommand.ZINTERSTORE, () -> getConnection().zInterStore("dst".getBytes(), "set".getBytes())); verify(mockRedisConnection()).zInterStore("dst".getBytes(), "set".getBytes()); commandCreatesNewSpan(RedisCommand.ZINTERSTORE, () -> getConnection().zInterStore("dst".getBytes(), RedisZSetCommands.Aggregate.SUM, new int[]{0}, "set".getBytes())); verify(mockRedisConnection()) .zInterStore("dst".getBytes(), RedisZSetCommands.Aggregate.SUM, new int[]{0}, "set".getBytes()); }