1
opengps 2023-02-06 15:05:43 +08:00
少了最关键的:足够短的域名^^,op 可以去低价买个二手杂米.cc ,别问我是怎么知道的
|
2
RedisMasterNode 2023-02-06 15:10:26 +08:00 1
$random_number = rand(14776337, 916132832); // [62^4 + 1, 62^5]
while ($db->where('id', $random_number)->getValue('fwlink', 'count(*)') > 0) { $random_number = rand(14776337, 916132832); // [62^4 + 1, 62^5] } 这个方案不会在短连接数量很多的时候产生一些冲突吗,这里大概有 9 亿的可用值,也就是说数据量达到 3 亿左右基本上就有 1/3 的请求会需要查 > 1 次 DB 另外在访问的时候,相当于所有的访问都要去查询 DB ,即使链接是用户随便输入的 无恶意纯随便探讨一下,小工具做得挺有意思的页面简洁好看。 |
4
InFaNg OP @RedisMasterNode 听起来很有道理的样子,当时写这个随机数生成想的有点随意,感觉更合理的方法应该是在数据超过一定阀值后,在更大的范围内生成随机数,之后有空这部分重写下~~
|
5
RedisMasterNode 2023-02-06 15:31:53 +08:00
@InFaNg 有没有什么更稳定的唯一 ID 生成方案呢,或者你这里已经用了 base62 了,那有没有什么稳定的唯一十进制数生成方案呢,这里的 DB 查询完全可以避开的
|
6
fkdog 2023-02-06 15:43:48 +08:00
好奇现在还有短网址这样的需求么。。?
|
7
duanxianze 2023-02-06 16:03:36 +08:00
@fkdog 有 主要是发短信太长的参数没法带
|
9
AoEiuV020CN 2023-02-06 16:41:27 +08:00
|
10
wonderfulcxm 2023-02-06 16:45:18 +08:00 via iPhone
@fkdog 有,我们公司网站就有,一是统计,二是可以改短网址对应那个长网址,长网址换了分享出去还能改。
|
11
bearboss 2023-02-07 13:49:17 +08:00
@RedisMasterNode hash 或者随机数都可能碰撞 自增的话区间太明显 容易给别人根据规则遍历短链接 怎么才能完全避免查库呢
|
12
RedisMasterNode 2023-02-07 14:21:29 +08:00 2
@bearboss 自增区间会有反解的风险但是并不能说太明显
1. base62 算法你可以自由实现,包括如果不按照 ABC..XYZabc...xyz123..89 这个顺序,如果我将数字安插在不同字母之间作为 base62 算法的 base 呢?只要保证生成和解析是相同即可,不一定是服务外能简单猜测到的排序 2. 除了单纯的自增,在分布式场景中你的短链生成的机器有非常多,例如 50 个机器,每个机器除了有它自己的号段以外,还需要将机器号埋入 base62 之前的明文,例如我为每台机器分配名字:33869 、22193 这些都是无规则的 ID ,可以进一步混淆 base62 前的明文 类似的 trick 还可以举例好几种,仍然有反解的风险,但是我理解这个东西得看是否产生价值,如果反解要花很多时间的话那我觉得服务端的目的已经基本达到了 |
13
thinkershare 2023-02-07 16:21:18 +08:00
国内大部分短信服务商直接不支持短网址动态短信,因为无法审核,就非常的无语。
|
14
tercel36524 332 天前
https://www.369url.cn
这个还是不错的一个选择, |