如何在 Java Spring Boot 中将 RedisTimeSeriesCommands 与 jedis 一起使用

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

我目前在我的 Java Spring Boot 项目中使用 jedis 版本 4.3.0。我有兴趣利用 Redis 时间序列命令接口在 Redis 中存储时间序列数据。但是,我不确定是否可以直接使用Redis时间序列命令与时间序列数据交互,而无需额外的依赖(例如JRedisTimeSeries)。如果可以直接使用,我应该如何建立连接并从该接口实现方法?

我尝试为 RedisTimeSeriesCommands 创建 bean

@Bean
    public RedisTimeSeriesCommands redisTimeSeriesCommands() {
        return new RedisTimeSeriesCommands() {
            @Override
            public String tsCreate(String key) {
                return null;
            }

            @Override
            public String tsCreate(String key, TSCreateParams createParams) {
                return null;
            }

            @Override
            public long tsDel(String key, long fromTimestamp, long toTimestamp) {
                return 0;
            }

            @Override
            public String tsAlter(String key, TSAlterParams alterParams) {
                return null;
            }

            @Override
            public long tsAdd(String key, double value) {
                return 0;
            }

            @Override
            public long tsAdd(String key, long timestamp, double value) {
                return 0;
            }

            @Override
            public long tsAdd(String key, long timestamp, double value, TSCreateParams createParams) {
                return 0;
            }

            @Override
            public List<Long> tsMAdd(Map.Entry<String, TSElement>... entries) {
                return null;
            }

            @Override
            public long tsIncrBy(String key, double value) {
                return 0;
            }

            @Override
            public long tsIncrBy(String key, double value, long timestamp) {
                return 0;
            }

            @Override
            public long tsDecrBy(String key, double value) {
                return 0;
            }

            @Override
            public long tsDecrBy(String key, double value, long timestamp) {
                return 0;
            }

            @Override
            public List<TSElement> tsRange(String key, long fromTimestamp, long toTimestamp) {
                return null;
            }

            @Override
            public List<TSElement> tsRange(String key, TSRangeParams rangeParams) {
                return null;
            }

            @Override
            public List<TSElement> tsRevRange(String key, long fromTimestamp, long toTimestamp) {
                return null;
            }

            @Override
            public List<TSElement> tsRevRange(String key, TSRangeParams rangeParams) {
                return null;
            }

            @Override
            public List<TSKeyedElements> tsMRange(long fromTimestamp, long toTimestamp, String... filters) {
                return null;
            }

            @Override
            public List<TSKeyedElements> tsMRange(TSMRangeParams multiRangeParams) {
                return null;
            }

            @Override
            public List<TSKeyedElements> tsMRevRange(long fromTimestamp, long toTimestamp, String... filters) {
                return null;
            }

            @Override
            public List<TSKeyedElements> tsMRevRange(TSMRangeParams multiRangeParams) {
                return null;
            }

            @Override
            public TSElement tsGet(String key) {
                return null;
            }

            @Override
            public TSElement tsGet(String key, TSGetParams getParams) {
                return null;
            }

            @Override
            public List<TSKeyValue<TSElement>> tsMGet(TSMGetParams multiGetParams, String... filters) {
                return null;
            }

            @Override
            public String tsCreateRule(String sourceKey, String destKey, AggregationType aggregationType, long timeBucket) {
                return null;
            }

            @Override
            public String tsCreateRule(String sourceKey, String destKey, AggregationType aggregationType, long bucketDuration, long alignTimestamp) {
                return null;
            }

            @Override
            public String tsDeleteRule(String sourceKey, String destKey) {
                return null;
            }

            @Override
            public List<String> tsQueryIndex(String... filters) {
                return null;
            }

            @Override
            public TSInfo tsInfo(String key) {
                return null;
            }

            @Override
            public TSInfo tsInfoDebug(String key) {
                return null;
            }
        }
    } 

但是我不知道如何实现方法。

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

在您的实现中,您注入/公开正确的 Jedis 客户端以使用 https://github.com/redis/jedis/blob/master/src/main/java/redis/clients/jedis/timeseries/RedisTimeSeriesCommands 中的命令.java,您可以通过

UnifiedJedis

获取

在顶层,您可能需要一个

RedisConnectionFactory
类型的
JedisConnectionFactory
,例如:

@Bean
public JedisConnectionFactory jedisConnectionFactory() {
  return new JedisConnectionFactory();
}

@Bean
public UnifiedJedis unifiedJedis(RedisConnectionFactory factory) {
  // Assumes factory is JedisConnectionFactory
  JedisConnectionFactory jedisFactory = (JedisConnectionFactory) factory;

  // Configure as needed
  JedisPoolConfig poolConfig = new JedisPoolConfig();
  // Set pool config as needed

  // Return the UnifiedJedis instance
  return new UnifiedJedis(jedisFactory.getHostName(), jedisFactory.getPort(), poolConfig)
}

@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory factory) {
  RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
  template.setConnectionFactory(factory);
  return template;
}

然后将

UnifiedJedis
连接到您的 Bean 中并使用公开的 TS 方法:

unifiedJedis.tsCreate("myTSKey");
© www.soinside.com 2019 - 2024. All rights reserved.