主要逻辑:
1, 确定一个包括大小写字母、数据的字符串LS,长度为 L = 26+26+10 = 62
2, 初始化L**N个整数,并作为一个序列push到redis里
3, 当需要转换一个长URL时,先从以上的序列中随机pop出一个整数I
4, 对整数I取模(除数为L),余数对应到LS的一个字母,取完模后再除以L取整,当结果等于0时停止除模,否则结果继续取模。
5, 将所有余数对应的字母按顺序排列得到一个简短的字符串SS
6, 将长URL的md5哈希值作为KEY,将字符串SS作为VALUE,写入redis
7, 将字符串SS作为KEY, 将长URL作为VALUE,写入redis
8, 将前缀(短url域名)加上字符串SS,作为短URL结果返回
9, 当用户使用短url访问时,将短URL中的字符串SS取出,并作为KEY从redis中取出长URL,跳转长URL
注意:
当redis中序列数字快使用完时,要及时增加(可以写个脚本随时监控,数量少于10%时就自动增加数量),切忌不能存已经用过的数字
#encoding=utf-8 import string import redis import hashlib LETTERS = string.digits + string.ascii_letters LETTERS_NUM = len(LETTERS) COUNTER_KEY = 'url:counter' def init(rd,num): for i in xrange(LETTERS_NUM * num): rd.sadd('url:id:set',i) #通过urlid取得短url对应的字符串 def get_url(urlid): result = [] q = urlid/LETTERS_NUM r = urlid%LETTERS_NUM result.append(LETTERS[r]) while q: r = q%LETTERS_NUM q = q/LETTERS_NUM result = [LETTERS[r]] + result return ''.join(result) #得到短url字符串 def parse_url(rd, longurl): ret = longurl if (longurl.startswith("http://") or longurl.startswith("https://")) and len(longurl)>7: m = hashlib.md5() m.update(longurl) urlkey = m.digest() old_param = rd.get(urlkey) if old_param: ret = old_param else: urlid = int(rd.spop('url:id:set')) param = get_url(urlid) rd.incr(COUNTER_KEY, 1) rd.set(param,longurl) rd.set(urlkey,param) ret = param print "short url:",ret return ret if __name__ == "__main__": url = "http://www.google.com/" rd = redis.Redis('127.0.0.1',6379,db=0) init(rd,3) parse_url(rd,url)
相关推荐
本项目添加了这样的功能,在SP网站中可以生成短URLs。这些URLs指向列表或文档。例如http://smallville-pc/url/nnefhmo。 本项目的目的是允许用户创建短URLs,指向文档或列表/库,这样可以轻松分享。
java工具实现类-根据网站链接url,生成二维码图片,存放本地目录
通过网页url地址生成jpg图片,解决了32、64位运行环境问题
URL转换为PDF的Java实现,收集了各种方式,总有一种适合你
百度搜索结果当中,真实url转换软件,需要的朋友可以下载
实现一个转pdf的功能。 phantomjs 相比 ...phantomjs 相比 IText ,支持URL 转换PDF、 转换完整度高。 经过比较,我觉得phantomjs是转化比较好的。 以上提供一个简易的demo,实现URL或HTML转换为PDF文件。
高级 URL 缩短器是一个强大的 URL 缩短程序,允许用户将一个很长的凌乱 URL 转换为简短、易于记忆的 URL。它不止于此。它还具有大量惊人的功能,如流量和数据分析、国家/地区和设备定位、密码保护等。 高级会员资格...
ASP.NET MVC 中由路由生成URL各种规则,不得不知啊
将远程url生成本地静态文本,实现url装html txt 等 还可以配合批处理+计划任务实现定时更新动态页面成静态页面
1、将长链接转换成短链接,访问短链接时, 302重定向至原始长链接 2、支持设置短链有效期 3、支持记录访问次数 一个基于SpringBoot 开发的在线短链生成系统源码 实现功能 1、将长链接转换成...
转换源 + 目标 URL 的 CSV 并生成 IIS UrlRewrite 映射以放置在 web.config 中。 先决条件 信息系统 IIS UrlRewrite 模块 2.0 使用重定向映射的已配置重写规则 生成重写映射 控制台应用程序接受两个参数:CSV 文件...
短网址生成器就是一种把原来很长的网址缩短为很短的网址的工具,发表QQ空间说说、微博等,都有字数的限制,但这些社交媒体都能够自动转换短网址,其他媒介,比如QQ好友、群、签
高级 URL 缩短器是一个强大的 URL 缩短程序,允许用户将一个很长的凌乱 URL 转换为简短、易于记忆的 URL。它不止于此。它还具有大量惊人的功能,如流量和数据分析、国家/地区和设备定位、密码保护等。 高级会员资格...
该将普通的GitHub文件url转换为其原始url格式。 例如, https://github.com/actioncloud/github-raw-url/blob/master/index.js : https://github.com/actioncloud/github-raw-url/blob/master/index.js的原始URL为...
高级 URL 缩短器是一个强大的 URL 缩短程序,允许用户将一个很长的凌乱 URL 转换为简短、易于记忆的 URL。它不止于此。它还具有大量惊人的功能,如流量和数据分析、国家/地区和设备定位、密码保护等。 高级会员资格...
3. 可以批量导入, 但是必须按指定格式 ( 系统名称 ,url地址),可以参考例子url.txt 4. 可以批量生成报告 5.可以批量导出报告,且文件名就是系统名称,非常方便。默认是导出html报告格式。 6.注意文本文件的...
整体而言,这款网址缩短器工具结合了Pyshorteners、Pillow和tkinter库的功能,提供了一个简单、实用且美观的界面,让用户可以快速、方便地轻松地将长URL转换为短URL,并管理生成的短链接。可提升链接分享和管理的...
前言 短网址服务,可能很多朋友都已经...//短网址生成算法 class ShortUrl { //字符表 public static $charset = 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz; public static function enco