package twitter.streaming; import java.util.HashMap; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; import backtype.storm.task.TopologyContext; import backtype.storm.topology.BasicOutputCollector; import backtype.storm.topology.IBasicBolt; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology.base.BaseBasicBolt; import backtype.storm.tuple.Tuple; import backtype.storm.utils.TimeCacheMap; import backtype.storm.utils.TimeCacheMap.ExpiredCallback; public class TwitterHashtagsSaver extends BaseBasicBolt implements ExpiredCallback<String, Integer>{ Map<String, Integer> hashtags = new HashMap<String, Integer>(); private Jedis jedis; TimeCacheMap<String, Integer> cacheMap; @Override public void cleanup() { } @Override public void execute(Tuple input, BasicOutputCollector collector) { String hashtag = input.getStringByField("hashtag"); Integer hashtagCount = cacheMap.get(hashtag); if(hashtagCount == null) hashtagCount = 0; cacheMap.put(hashtag, hashtagCount + 1); } @Override public void prepare(Map stormConf, TopologyContext context) { String redisHost = (String) stormConf.get("redisHost"); Integer redisPort = ((Long) stormConf.get("redisPort")).intValue(); this.jedis = new Jedis(redisHost, redisPort); this.jedis.connect(); cacheMap = new TimeCacheMap<String, Integer>(10, this); } @Override public void expire(String key, Integer val) { jedis.hincrBy("hashs", key, val); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) {} }