You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中使用Jedis 4.3.0直接操作RedisTimeSeriesCommands的方法

关于Jedis 4.3.0使用Redis时序命令的解决方案

核心结论

Jedis 4.3.0已经内置了RedisTimeSeries命令的实现,不需要额外引入JRedisTimeSeries等第三方依赖。你完全不需要自己实现RedisTimeSeriesCommands接口——Jedis类本身就实现了这个接口,直接用Jedis实例就能调用所有时序命令。

前置条件

确保你的Redis服务器已经安装并启用了RedisTimeSeries模块(Redis默认不包含该模块,可单独安装或直接使用Redis Stack版本)。

具体实现步骤

1. Spring Boot中配置Jedis连接

首先在application.properties里配置Redis基础连接信息:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=your-redis-password # 无密码可省略
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0

然后配置Jedis连接池和RedisTimeSeriesCommands的Bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.commands.RedisTimeSeriesCommands;

@Configuration
public class RedisConfig {

    @Bean
    public JedisPool jedisPool() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8);
        poolConfig.setMaxIdle(8);
        poolConfig.setMinIdle(0);
        return new JedisPool(poolConfig, "localhost", 6379);
    }

    @Bean
    public RedisTimeSeriesCommands redisTimeSeriesCommands(JedisPool jedisPool) {
        // Jedis实例天然实现RedisTimeSeriesCommands接口,直接从连接池获取即可
        return jedisPool.getResource();
    }
}

2. 调用时序命令操作数据

注入RedisTimeSeriesCommands实例后,直接调用时序相关方法即可,比如创建时序键、添加数据、查询数据:

import org.springframework.stereotype.Service;
import redis.clients.jedis.commands.RedisTimeSeriesCommands;
import redis.clients.jedis.timeseries.*;

import javax.annotation.Resource;
import java.util.List;

@Service
public class TimeSeriesService {

    @Resource
    private RedisTimeSeriesCommands tsCommands;

    // 创建带标签的时序键,设置数据保留7天
    public void createTempSensorSeries() {
        tsCommands.tsCreate("sensor:temp",
                new TimeSeriesCreateParams()
                        .retention(604800000)
                        .label("device", "sensor-001")
                        .label("location", "room-101"));
    }

    // 单条添加时序数据(使用当前时间戳)
    public void addSingleTempData(double temp) {
        tsCommands.tsAdd("sensor:temp", System.currentTimeMillis(), temp);
    }

    // 批量添加时序数据
    public void addBatchTempData() {
        long now = System.currentTimeMillis();
        List<TSElement> elements = List.of(
                new TSElement(now - 1000, 25.5),
                new TSElement(now - 2000, 25.4),
                new TSElement(now - 3000, 25.3)
        );
        tsCommands.tsMAdd(elements);
    }

    // 查询最近1小时的温度数据,返回带标签的结果
    public List<TSElement> queryRecentTempData() {
        long oneHourAgo = System.currentTimeMillis() - 3600000;
        return tsCommands.tsRange("sensor:temp",
                oneHourAgo,
                System.currentTimeMillis(),
                new TimeSeriesRangeParams().withLabels());
    }
}

3. 注意事项

  • 连接池会自动管理Jedis实例的生命周期,不需要手动调用close()方法。
  • 如需聚合查询、降采样等复杂操作,可直接使用tsAggregate、tsCreateRule等方法,参考Jedis内置的RedisTimeSeries API即可。

内容的提问来源于stack exchange,提问作者DMT PYTN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 07:42:27