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
相关产品推荐
相关产品推荐

