短网址(Short URL)是一种将原始的、冗长复杂的 URL转换为长度更短、格式更简洁的 URL 的技术。其核心价值在于解决长 URL 在传播、展示和使用中的不便,同时具备可追踪、可管理等延伸功能。
例如社交媒体上的文章的url都很长,转换为短网址后,即节省空间,也方便记忆。
package com.foxbill.redisinaction;
import redis.clients.jedis.Jedis;
/**
* 短网址生成器
*/
public class Chapter20 {
static String key_id="chapter20:urlshorty:id";
static String key_mapping="chapter20:urlshorty:mapping";
static public void start(Jedis jedis) {
String url = "https://www.google.com";
//生成url的短id,存放到redis中
String shortid = shorten(jedis, url);
System.out.println("shortid:"+shortid);
//从redis中获取短id对应的url
String restore = restore(jedis, shortid);
System.out.println("url:"+restore);
}
private static String shorten(Jedis jedis, String url) {
long id = jedis.incr(key_id);
String shortid = Base62Encoder.encode(id);
jedis.hset(key_mapping, shortid,url);
return shortid;
}
private static String restore(Jedis jedis, String shortid) {
return jedis.hget(key_mapping, shortid);
}
}
/**
* Base62编码器
*/
class Base62Encoder {
private static final String BASE62_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// 编码:将长整型数字转换为Base62字符串
public static String encode(long number) {
if (number == 0) return "0"; // 处理0的特殊情况
StringBuilder sb = new StringBuilder();
while (number > 0) {
int remainder = (int) (number % 62);
sb.append(BASE62_CHARS.charAt(remainder));
number /= 62;
}
return sb.reverse().toString(); // 反转字符串以获得正确顺序
}
// 解码:将Base62字符串转换为长整型数字
public static long decode(String base62String) {
long number = 0;
for (int i = 0; i < base62String.length(); i++) {
char c = base62String.charAt(i);
int digit = BASE62_CHARS.indexOf(c); // 获取字符对应的数值
number = number * 62 + digit; // 累加计算原始值
}
return number;
}
}
5万+

被折叠的 条评论
为什么被折叠?



