一、前言
有时需要用户扫描一个二维码,然后跳转到自己服务器的前端页面(当然跳转到后端url也行)。
二维码本质就是一个url,手机扫码后、就去访问这个url。
但是,如果url过长(地址过于复杂、参数过多),生成的二维码就会很密,手机扫码后解析和跳转花费的时间也会很长,用户体验就会很差。
此时,就需要想办法用一个短连接来代替长连接,生成的二维码密度也会小些,手机扫码后就能快速跳转。
二、思路
1.本人的系统中,有一个数据库表short_url,里面主要有4列:
id
hash_code #存储长连接md5加密后得到的串
true_url #存储长连接
create_time
其中,true_url存储原本要跳转的长连接;
hash_url存储对应的短连接,是使用DigestUtils.md5Hex(true_url)
这个方法,把长连接进行md5加密、得到的串存入hash_code里。
2.生成二维码时,找一个后台接口,然后传一个参数hash_code
,然后就用这个地址生成二维码。(这个地址很短,可以算短链接)
例如:
http://localhost:8080/hash?code=qlwekjradioufqwe
这个url就是短连接二维码地址。
3.扫描这个短链接二维码时,就先跳转到/hash
后台接口,后台接口获取到code=qlwekjradioufqwe
,然后查询数据库表short_url:
id hash_code true_url
1 qlwekjradioufqwe http://localhost:8080/a/b/c/d/e/f?a=1&b=2&c=3
根据hash_code查询到true_url,然后重定向到这个长连接即可:http://localhost:8080/a/b/c/d/e/f?a=1&b=2&c=3
(当然实际的长连接可能会非常长)
4.查询数据库的操作,可以用redis当中间件,减小数据库压力。
三、总结
目前是因为手机扫描比较复杂的二维码(长连接)解析较慢、用户体验差,所以才用短链接二维码来实现,二维码简单些手机扫码解析会快很多。
后续后台系统从短连接重定向到长连接会很快,比直接扫长连接二维码会快很多。
因此才用短连接二维码代替长连接二维码,优化用户体验。