redis 2m数据读取_Flink读写Redis(二)读取redis数据

本文介绍了如何自定义Flink RedisSource,实现从Redis中读取2M数据。通过定义MyRedisRecord类封装Redis数据,创建Redis数据读取类并实现接口,支持哨兵模式和直连模式。还展示了如何使用该源来计算单词词频,提供了一个Flink处理Redis数据的基础示例。
摘要由CSDN通过智能技术生成

自定义flink的RedisSource,实现从redis中读取数据,借鉴了flink-connector-redis_2.11的实现思路,对redis读取操作进行封装,其中flink-connector-redis_2.11的使用和介绍可参考文末连接。项目中需要引入flink-connector-redis_2.11的maven依赖。

抽象redis数据

由于redis有不同的数据类型,所以先定义MyRedisRecord类,封装redis数据类型和数据对象

package com.jike.flink.examples.redis;
import org.apache.flink.streaming.connectors.redis.common.mapper.RedisDataType;
import java.io.Serializable;
public class MyRedisRecord implements Serializable {
    private Object data;
    private RedisDataType redisDataType;
    public MyRedisRecord(Object data, RedisDataType redisDataType) {
        this.data = data;
        this.redisDataType = redisDataType;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public RedisDataType getRedisDataType() {
        return redisDataType;
    }

    public void setRedisDataType(RedisDataType redisDataType) {
        this.redisDataType = redisDataType;
    }
}

定义Redis数据读取类

将redis的操作封装起来,首先定义接口类,定义支持的读取操作,例子中这只写了哈希表的get操作,可以增加更多的操作

package com.jike.flink.examples.redis;
import java.io.Serializable;
import java.util.Map;
public interface MyRedisCommandsContainer extends Serializable {
    Map hget(String key);
    void close();
}

定义一个MyRedisCommandsContainer接口实现类,实现对redis的读取操作,主要是调用了Jedis的API,可以支持哨兵模式和直连redis两种模式的连接redis

package com.jike.flink.examples.redis;
import org.apache.flink.util.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisSentinelPool;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MyRedisContainer implements MyRedisCommandsContainer,Cloneable{

    private static final long serialVersionUID = 1L;
    private static final Logger LOG = LoggerFactory.getLogger(MyRedisContainer.class);
    private final JedisPool jedisPool;
    private final JedisSentinelPool jedisSentinelPool;

    public MyRedisContainer(JedisPool jedisPool) {
        Preconditions.checkNotNull(jedisPool, "Jedis Pool can not be null");
        this.jedisPool = jedisPool;
        this.jedisSentinelPool = null;
    }

    public MyRedisContainer(JedisSentinelPool sentinelPool) {
        Preconditions.checkNotNull(sentinelPool, "Jedis Sentinel Pool can not be null");
        this.jedisPool = null;
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值