我目前在我的 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;
}
}
}
但是我不知道如何实现方法。
在您的实现中,您注入/公开正确的 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");