package redis;
import redis.clients.jedis.Jedis;
public class 短连接 {
// 社交网站点击追踪机制:类似微博,发送连接地址:http://redis.com/index.html->http://t.cn/XSGGA9D
//
// 长连接赚成短连接,可以利用短连接进行点击数量追踪,然后再让你进入短连接对应长连接里面去,所以可以利用hash数据结构实现网址点击追踪机制。
//
// 可以根据短连接作为key,可以知道有多少人访问了你这个短连接;。
Jedis jedis = new Jedis("127.0.0.1");
public 短连接(){
//将短连接设置特别大
jedis.set("short_url_seed","39213021");
}
private static final String X36="01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String[] X36_ARRAY="0,1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z".split(",");
/**
* 给短连接进行次数增加
* @param curl
*/
public void incr(String curl){
//+1
jedis.hincrBy("short_url_access_count",curl,1);
}
public Long getincr(String curl){
//+1
return Long.valueOf(jedis.hget("short_url_access_count",curl));
}
/**
* 获取短连接网址
* @param url
* @return
*/
public String getShortURL(String url){
Long num = jedis.incr("short_url_seed");
StringBuffer sb=new StringBuffer();
while(num>0){
sb.append(X36_ARRAY[(int)(num%36)]);
num=num/36;
}
String shorUrl = sb.reverse().toString();
jedis.hset("short_url_access_count",shorUrl,"0");
//维护长连接对应映射关系
jedis.hset("url_mapping",shorUrl,url);
return shorUrl ;
}
public static void main(String[] args) {
短连接 d = new 短连接();
String shortURL = d.getShortURL("http://redis.com/index.html");
//对短连接访问
System.out.println("网页短连接地址为"+shortURL);
for (int i = 0; i <152 ; i++) {
d.incr(shortURL);
}
Long getincr = d.getincr(shortURL);
System.out.println("短连接被访问次数"+getincr);
}
}