可以转发的二级域名

可以转发的二级域名,第1张

热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

可以转发的自定义短域名

打开APP

Azote – 可解析可转发的法国超短免费二级域名 原创

2013-12-13 00:00:21

心语家园

码龄14年

关注

Free8发现Azote设置转发容易被封,而解析却没问题,请大家注意!

来自法国的Azote为站长们提供免费二级域名服务,域名后缀有asso.st、fr.cr、fr.nf、biz.st、ze.cx、 infos.st和xxl.st,都挺短的,申请简单,无任何广告,仅可设置DNS、A记录和网址转发,不支持设置其它解析,可在免费二级域名基础上添加 子域名,隐藏转发需要管理员审核。

网址:http://www.azote.org

Free8发现Azote设置转发容易被封,而解析却没问题,请大家注意!大家可以使用免费DNS解析服务来设置转发,不要直接用Azote的转发服务。另外Azote的解析不是马上生效,需要等待一段时间。

虽然是法语网站,但申请和使用都非常简单,看不懂的朋友借助Google翻译来在线翻译一下即可。如果觉得Azote的解析功能太简单了,可以结合中国E动网免费DNS解析服务来使用。

免费二级域名演示:http://free8.infos.st

免费二级域名子域名演示:http://free8.free8.infos.st

查看原文: http://shouji163.cn/archives/969

打开CSDN,阅读体验更佳

短域名php,利用PHP实现短域名互转_勃欣然的博客

利用PHP实现短域名互转 如何使用PHP实现短域名互转?下面的代码可以帮助你实现,非常简单,需要的朋友可以参考下。 代码如下: /** * 短域名生成&解析类 */ class Build_URL { private$memprivate $base_url = 'http://xxx.com/...

自定义短网址-不死鸟微信防封系统api-SDK(六)_chaogai6917的博客-CSDN...

如果你微信业务有个落地页面域名 a,如果你希望整个跳转防封都是自己的自己的域名,自定义短网址非常适合你,让你的链接管理高度可控。不和别人混淆使用。 在微信里面 防封的网址打开有3种方式: 直接打开 提示浏览器打开 如果域名被微信封...

k6免费二级域名转发程序

功能虽不多但是解析二级域名的速度是很快的<br>后台管理文件是 admin.asp<br>程序具体配置请修改 congif.asp

如何获得免费二级域名?仅需这一步

很多人都会用自己的PC机搭建服务器,但是由于没有固定公网IP,使得异地访问变得很麻烦。 这时候就需要使用域名来解析IP地址,实现外网访问。 像baidu.com、sohu.com这样的一级域名是需要实名注册并且收费才能获取,如果我们不是做网站来用,实际上是用不到的。 所以很多人在寻找免费的二级域名,下面我就给大家推荐一个非常好用软件——快解析 下载并安装“快解析”客户端https://www.kuaijiexi.com/ 这样我们就获得了一个以“用户名.gnway.cc”为格式的免费二级...

继续访问

自建自定义短网址,可自定义域名,可统计点击数、来源_搞么罗的博客-CSDN...

很多网友在网上通过短网址发布信息时,无法统计是通过哪个渠道点击。 今天分享一个程序,这款程序不仅可以生自定义的短网址,还可以统计点击信息。 PS: 其实,用自己的域名不仅可以显得出逼格,其实更重要的是为了更好的统计转化。短网址,重要...

微信域名防封之使用自定义短域名和短域名服务器-不死鸟微信域名防封系统...

目前市面上iis,apache,nginx等web服务器均支持反向代理。成熟的web服务器都支持反向代理。不知道,可以度娘 步骤: 一、在某宝/度娘上购买已经备案域名,至少2个域名。 第一个域名:做顶级入口跳转域名短网址(微博短网址指向这个域名) ...

CO.CC – 功能全面的超短免费二级域名

CO.CC – 功能全面的超短免费二级域名 CO.CC免费提供“yourname.co.cc”的免费二级域名,也可以注册“你的名字.co.cc”这样的中文域名以及其它语种域名,具有包括中文版在内的20多种语言版本,支持隐藏或不隐藏原URL转发,完全DNS解析功能,可以修改DNS,设置A记录、CNAME记录、NS记录以及MX记录,还完全支持GoogleApps企业邮局,而且没有广告...

继续访问

一些获取免费域名的方法

1、花生壳域名: 建议大家开通免费渠道即可或者 几十块钱就可以买一年 2、freenom域名: 这个是一个注册免费域名的网站, 可以免费注册tk等域命 3、免费的ml、gl域名 有些ws小程序(这里我推荐->域名com)这个小程序可以获取一年的免费域名,但是他们好像要你填写用途才能获取到域名 ...

继续访问

汇总一下至今可用的短网址服务_leer_gd的博客_当前可用...

1.百度短网址:首推百度的,毕竟大厂出品,稳定一些,可以自定义 2.新浪短网址:百度的限制比较多,推荐新浪的,可用的后缀很全 3.T.TLURL Shortener :服务存在很久,短网址很短,可以自定义,但是有中转页面 ...

短域名原理_weixin_33894992的博客

首先,短域名仍然遵守 URL 的标准格式,即:schema+host+path。schema 没什么好说的,host 部分,仍然是各回各家,各找各妈。例如,t.cn 是新浪的,tb.cn 是阿里的(话说,新浪能抢到 t.cn 这个域名,也是够拼的)。这部分必定是需要 DN...

二级域名 免费+免备案

今天给大家推荐一个免备案的免费二级域名注册平台。 DYUNS域名网 - 永久免费域名_免备案域名 只需要一个邮箱,就能注册到自己的二级域名,非常方便。 提供"icu.ltd"等超短域名注册服务,非常有利于用户访问与记忆。 平台还提供了免费的 CDN+防御+免备案 服务,这是其他平台都没有的,也是我选择它的理由之一。 管理也非常方便,后台一键就能完成自助删改解析等 *** 作。 官方客服的服务也是十分的到位,体验很好。 大家也可以自行注册体验哦! ...

继续访问

CSDN自定义域名短代码分享

前言 众所周知,CSDN博客六级送自定义域名,但是我水了这么久才五级,实在是等不下去了,于是通过自己的服务器(Github page也行,但是Gitee page行不通)利用了一个简单的HTML标签实现了自定义域名跳转,以后再也不用记CSDN又长又乱的域名了,废话不多说,短代码奉上 <!DOCTYPE html><html><head><meta charset="utf-8"><title><

继续访问

BeLink v1.0.4网站URL缩短器短域名生成源码_普通网友的博客

BeLink v1.0.4网站URL缩短器短域名生成源码 介绍: BeLink是一款高质量的URL缩短程序。 它可用于在几分钟内轻松创建您自己的公共或私有url缩短网站,而无需任何编码知识。 运行环境 PHP版本gt= 5.6...

springboot实现自定义短网址_hlvy的博客

springboot实现自定义短网址 短网址(Short URL) ,顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,...

免费二级域名分发企业备案域名 阿里云备案域名

幻影解析网(dns.52hyjs.com)专为新手站长提供的免费二级域名解析,域名均免费提供使用专门提供二级域名解析的平台,域名均免费提供使用,不收取任何费用,提供的域名当中有已备案域名和未备案域名,域名后缀多可自主选择解析 全站提供免费阿里云企业备案域名 供大家使用 https://dns.52hyjs.com/ ...

继续访问

Venez - 20余种后缀的免费二级域名

Venez是来自法国的免费二级域名,提供注册yourname.1s.fr、yourname.ch.ma、yourname.ze.tc等20多种后缀的免费二级域名,支持隐藏原URL转发(这样会有广告),除可域名转发还可设置A记录以及动态域名解析,具有简单统计功能。另外,还提供同域名后缀的免费转发邮箱(要注册完成后登陆后台申请开通)。 申请地址:http://www.venez.fr在页中文本框中输...

继续访问

最新发布 免备案二级域名 长久稳定+已备案

提供"xjqxz.top"等超短域名注册服务,非常有利于用户访问与记忆。域名网 - 永久已备案域名_免备案域名。,就能注册到自己的二级域名,非常方便。一键就能完成自助删改解析等 *** 作。推荐一个免备案的二级域名注册平台。大家也可以自行注册体验哦!

继续访问

原创:免费域名服务(可提供免费顶级超短域名和url转发服务,经测试成功。)...

今天下午在网上发现了一个可以提供免费域名服务的好东西:http://www.co.cc/ 为了便于 *** 作,进入网站后首先在网站右上角选择语言:中文(简体) 首先是要注册一个账号,注册成功后用该账号登陆。 然后开始检测域名是否可以创建: 例如我申请的域名为:www.nicholaslee.co.cc 如果该域名可用即可点击下一步继续申请,申请好的域名要在48小时以内进行设置 :...

继续访问

免费申请国外免费域名超详细教程

1.首先申请免费域名网站:https://my.freenom.com/domains.php 2.填入域名,这里我们以xcflag为列(尽量选择复杂一点的或者五个字母以上的域名,因为简单的有些域名是需要收费的),点击检查可用性。 3.可以看到很多免费的域名(用的谷歌翻译插件,翻译有时候不是很准确,free翻译过来应该是免费而不是自由,之后会写一些关于谷歌插件的笔记,详细讲解) 4.我们选择xcflag.tk点击立即获取,稍等一会点击购物车查看绿色按钮 5.默认三个月试用,这里下拉框我们选择十二个月

继续访问

白嫖免费二级域名

兄弟们,我在微信发现一个可以免费领二级域名的小程序,他们需要审核(超级简单)通过就能领取了。我搞了好几天才找到白嫖二级域名的地方,白嫖完后记得来点赞。嘻嘻

继续访问

英国只能设置A记录且无法更改的免费二级域名

IPQ.Co是英国哈德斯菲尔德的约翰·利奇于2010年10月为降低DNS管理的门槛而推出的一项服务,允许将子域映射到IP地址,因此它在某种程度上是动态DNS。

继续访问

继续分享:免费二级域名转发,大家可以为自己的Blog做个映射:D

首先声明:1,这不是广告,提供此服务的网站和我没有任何关系;2,由于是免费的二级域名转发,在转发后的页面下方有广告条,但属于比较老实的广告条;3,先到先得。同时免费的午餐可能意味着将来可能不可用,自己权衡;4,转发的二级域名,如果使用中文标题,显示会是乱码;5,使用邮箱注册,注册后会发送激活信息到邮箱,一个邮箱只能注册一次;6,域名转发到园子,IE无法正常显示页面,Opera和FireFox正常:...

继续访问

免费主机,免费二级域名分发,免费建临时网站,免费扒网

给大家分享一点,没钱,没钱,没钱,新手喜欢的东西! 废话不多,安排! 免费主机 网址:彩虹云主机(免备案) 在这里可以填久一点,最好就90年,又不需要钱,我们不要浪费! 主机准备好了,上免费域名! 建临时网站 1. 下载http服务器hfs.exe,这个是一个可执行文件,不需要安装,而且文件很小。 下载地址: http://www.rejetto.com/hfs/?f=dl 2.双击打开软件 3. 准备好一个记事本可以打开的文件(html或者txt等等都可以), 然后把这个文件拖入到上图中蓝色

继续访问

自建dns代理服务器,自建DNS服务器使用二级域名转发内网服务器(示例代码)

1.1,安装DNS服务[[emailprotected] ~]# yum install bind bind-bind-libs1.2,修改/etc/named.conf配置文件[[emailprotected] ~]#vim/etc/named.conf//// named.conf//// Provided by Red Hat bind package to configure the...

继续访问

gw.to免费二级域名注册,可解析支持完整的 DNS 服务

免费gw.to子域注册,支持完整的 DNS 解析,完全免费没有广告!可以免费注册最多 5 个域名,使用上面的搜索框查找免费域名注册。现在,提供最佳的免费域名注册动态 dns 服务,包括完整的 MX、CNAME、A、SOA、TXT 和 AAAA 记录。 不仅支持英文,还支持带有汉字,Emoji表情,符号的子域名。????、????、????、????。格式如下: freeaday.gw.to 免费资源网.gw.to 注册简单,只需邮箱即可注册,每个账号最多注册5个域名。 gw.to免费二级域名注册,可

继续访问

热门推荐 久久管家-在线云储存综合管家

名称:久久管家-在线云储存综合管家 版本:1.0 软件大小:7.1MB 软件语言:中文简体 软件授权:免费版 应用平台:Win7/WinVista/Win2003/WinXP/Win2000 久久管家是一款提供在线云储存功能的综合管家,由久久宝盒、久久云、久久相册、久久冲印组成。提供端到端的照片/视频备份服务:智能备份、永久存储、人脸识别、照片冲印、照片分享。放置在家中的久久宝...

继续访问

白嫖免费域名+免费服务器

点击蓝字关注我们免费注册地址https://byet.host/不要翻墙是真的免费吗?byethost.com是一个老牌的免费空间商,从2006年起就开始提供免费空间了,其免费服务非常稳...

继续访问

可以转发的自定义短域名

写评论

评论

收藏

点赞

分享

url.cn超短链接顾名思义就是使用腾讯的API接口将冗长的链接转换成超短的url.cn链接。使用url.cn超短链接更易于用户记忆,利于用户转化。推荐几个目前国内较为出色的url.cn超短链接生成工具(附新浪短链接生成工具),值得收藏!

平台官网: http://kndwz.com

随着移动SEO的重要性越来越重要,在推广的时候如果优化和缩短网页链接可以获得更好的访问。快鸟短网址是一个便捷的长链接缩短工具,用户可以免费使用该平台的接口生成腾讯短网址(或新浪短链接),快鸟短网址不仅可以生成短链接,还支持批量缩短链接,与其他应用程序集成以及短链接跟踪,这对于企业级用户来说,使用起来不仅高效也很便捷。这些特性使它成为一个高质量的软件工具,可更好的帮助你提升推广的效率。

平台官网: http://qturl.cn

青桃短链接是一个老牌的第三方短链接服务平台了。对于其技术支持和服务质量来说,可以说是国内最好的短链接服务商之一。

该平台可让您通过简单地复制粘贴链接就能缩短你的长链接,您在几秒钟内就可以设置一个新的短链接域名(url.cn),用于包装你的长链接,且无需验证码或额外的验证。

注册成为会员后,您还能获得更多的功能选择,例如可以批量生成短链接,再例如可以调用api接口生成腾讯短网址(或新浪短链接)等。长期以来,青桃短链接一直是最好的短链接生成工具之一,这来源于其产品高质量和技术的可靠性。

平台官网: http://lnurl.cn

蓝鸟短链接是目前国内最好的第三方短链接生成服务商之一。任何用户都可以匿名使用该平台的腾讯短网址(新浪短链接)接口缩短自己的网址,你也可以跟踪生成短连接的访问量。

但平台的免费接口生成次数是有限的,如果您要订阅无限次数或更多次数,可以注册成为会员或开通高级服务,开通后则可以根据自己的需求批量生成(或调用API接口)生成更多的腾讯短网址(新浪短链接)了,以及能追踪链接的点击次数和基本数据报告。由于它稳定的技术和便利的链接跟踪,蓝鸟短链接可能是目前排名前三的短链接生成器。

平台官网: http://dogdwz.cn/

冷狗短链接那边提供最新的新浪T.CN短链接在线生成服务,每天都可以去免费生成新的微博T.CN短网址,他们采用的是新浪微博的官方的原生态生成接口,安全、稳定、一次生成永久使用。。

平台官网: http://tttool.cn

雷虎短链不生产短链,雷虎只是短链的搬运工,对接两大平台短链接口生成新浪和腾讯短链为什么不和其他小台子一样,自己做短链?大平台稳定,兼容性好,速度快,不易被封杀等诸多优点,秒杀小台子雷虎短链可直接免费在线生成短链。

一、前言

前几天整理面试题的时候,有一道试题是《如何将一个很长的URL转换为一个短的URL,并实现他们之间的相互转换?》,现在想起来这是一个绝对不简单的问题,需要考虑很多方面,今天和大家一起学习研究一下!

短网址:顾名思义,就是将长网址缩短到一个很短的网址,用户访问这个短网址可以重定向到原本的长网址(也就是还原的过程)。这样可以达到易于记忆、转换的目的,常用于有字数限制的微博、二维码等等场景。

关于短URL的使用场景,举个简单的例子来说明一下,看一下业务中使用短URL的重要性!

二、短地址使用场景

1、新浪微博

我们在新浪微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:https://t.cn/RuPKzRW。为什么要这样做的?

这是因为微博限制字数为140字一条,那么如果我们需要发一些链接上去,但是这个链接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的或者说用户体验很差的,所以短网址应运而生了,短网址这种服务可以说是在微博出现之后才流行开来的!往下看:

(1)首先,我先发一条微博带有一个URL地址:

(2)然后,看他转换之后显示的效果是什么样子的哪?

(3)查看对应页面元素的HTML源码如下:

(4)可以看出:https://blog.csdn.net/xlgen157387/article/details/79863301 被转换为:http://t.cn/RuPKzRW,此时你访问http://t.cn/RuPKzRW是可以定位到https://blog.csdn.net/xlgen157387/article/details/79863301,也就是实现了转换。

2、短网址二维码

网址在转换成短网址时,也可以生成相应的短网址二维码,短网址二维码的应用,二维码核心解决的是跨平台、跨现实的数据传输问题;而且二维码跟应用场景结合之后,所能解决的问题会越来越多。

(1)短网址二维码相比短链接更方便,能少输入,尽量少输入,哪怕只是少点一下键盘,都是有意义的。

(2)二维码只是扫描一个简单的链接,打开的却是一个世界。想象一下,用手机购买售货机里商品,二维码扫描是略快于从用手机找到该售货机并找到该商品的,而且这种 *** 作相对于搜索/查找而言不是更优雅吗?

(3)所有商超里面的商品,都是使用条码来确定商品的唯一性的,去买单的时候都是扫描条码。试想,如果里面加入了更多产品的生产日期、厂家、流转途径、原材料等等信息,是不是厉害了呢?特别是针对食品信息的可追溯上,二维码应用场景更广泛。

三、短地址的好处

除了上述场景中,我们将长地址转换为短地址的使用场景的优点(压缩URL长度)之外,短地址还具有很多实际场景中的优点,例如:

(1)节省网址长度,便于社交化传播,一个是让URL更短小,传播更方便,尤其是URL中有中文和特殊字符,短网址解决很长的URL难以记忆不利于传播的问题;

(2)短网址在我们项目里可以很好的对开放以及对URL进行管理。有一部分网址可以会涵盖性、暴力、广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,对同样的URL通过加密算法之后,得到的地址是一样的;

(3)方便后台跟踪点击量、地域分布等用户统计。我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策;

(4)规避关键词、域名屏蔽手段、隐藏真实地址,适合做付费推广链接;

(5)当你看到一个淘宝的宝贝连接后面是200个“e7x8bv7c8bisdj”这样的字符的时候,你还会觉得舒服吗。更何况微博字数只有140字,微博或短信里,字数不够,你用条短网址就能帮你腾出很多空间来;

四、短网址服务提供平台

目前,国内网又很多提供短地址服务的平台,例如:

新浪:http://sina.lt/

百度:http://dwz.cn/

0x3:http://0x3.me/

MRW:http://mrw.so/

等等还有很多,这个可以搜索一下就会有很多!但是一个注意的是,如果使用某一个平台的短地址服务,一定要保证长期可靠的服务,不然一段时间失效了,我们以前已经转换的URL就完了!

这里以百度例,将我们上述博客的地址转换为短地址如下所示:

当然,对于我们的业务来说,如果自己可以提供自己的短URL服务那才是更好的,不需要受制于人!(中国芯片需要崛起!!!)

五、关于如何生成短地址URL的讨论

关于短地址URL如何生成方式的,网上有很多方式,有基于映射的,有基于Hash的,有基于签名的,但是总的来说并不能满足绝大部分场景的使用,或者说是一种错误的设计方式。这里不再重复造轮子!以下是知乎用户iammutex关于该问题的探讨,截图过来和大家一起学习一下:

作者:iammutex

链接:https://www.zhihu.com/question/29270034/answer/46446911

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

六、生成短地址URL需要注意的

看到上述知乎用户iammutex关于如何正确生成短地址URL的探讨,我们知道了,可以通过发号器的方式正确的生成短地址,生成算法设计要点如下:

(1)利用放号器,初始值为0,对于每一个短链接生成请求,都递增放号器的值,再将此值转换为62进制(a-zA-Z0-9),比如第一次请求时放号器的值为0,对应62进制为a,第二次请求时放号器的值为1,对应62进制为b,第10001次请求时放号器的值为10000,对应62进制为sBc。

(2)将短链接服务器域名与放号器的62进制值进行字符串连接,即为短链接的URL,比如:http://t.cn/sBc。

(3)重定向过程:生成短链接之后,需要存储短链接到长链接的映射关系,即sBc ->URL,浏览器访问短链接服务器时,根据URL Path取到原始的链接,然后进行302重定向。映射关系可使用K-V存储,比如Redis或Memcache。

七、生成短地址之后如何跳转哪?

对于该部分的讨论,我们可以认为他是整个交互的流程,具体的流程细节如下:

(1)用户访问短链接:http://t.cn/RuPKzRW;

(2)短链接服务器http://t.cn收到请求,根据URL路径RuPKzRW获取到原始的长链接(KV缓存数据库中去查找):https://blog.csdn.net/xlgen157387/article/details/79863301;

(3)服务器返回302状态码,将响应头中的Location设置为:https://blog.csdn.net/xlgen157387/article/details/79863301;

(4)浏览器重新向https://blog.csdn.net/xlgen157387/article/details/79863301发送请求;

(5)返回响应;

八、短地址发号器优化方案

1、算法优化

采用以上算法,如果不加判断,那么即使对于同一个原始URL,每次生成的短链接也是不同的,这样就会浪费存储空间(因为需要存储多个短链接到同一个URL的映射),如果能将相同的URL映射成同一个短链接,这样就可以节省存储空间了。主要的思路有如下两个:

方案1:查表

每次生成短链接时,先在映射表中查找是否已有原始URL的映射关系,如果有,则直接返回结果。很明显,这种方式效率很低。

方案2:使用LRU本地缓存,空间换时间

使用固定大小的LRU缓存,存储最近N次的映射结果,这样,如果某一个链接生成的非常频繁,则可以在LRU缓存中找到结果直接返回,这是存储空间和性能方面的折中。

2、可伸缩和高可用

如果将短链接生成服务单机部署,缺点一是性能不足,不足以承受海量的并发访问,二是成为系统单点,如果这台机器宕机则整套服务不可 用,为了解决这个问题,可以将系统集群化,进行“分片”。

在以上描述的系统架构中,如果发号器用Redis实现,则Redis是系统的瓶颈与单点,因此,利用数据库分片的设计思想,可部署多个发号器实例,每个实例负责特定号段的发号,比如部署10台Redis,每台分别负责号段尾号为0-9的发号,注意此时发号器的步长则应该设置为10(实例个数)。

另外,也可将长链接与短链接映射关系的存储进行分片,由于没有一个中心化的存储位置,因此需要开发额外的服务,用于查找短链接对应的原始链接的存储节点,这样才能去正确的节点上找到映射关系。

九、如何用代码实现短地址

1、使用随机序列生成短地址

说到这里终于说到重点了,很多小伙伴已经按捺不住了,不好意思让大家失望了,这只是一片简单的文章,并不能把这么繁杂的一个系统演示清楚!秉着不要重复造轮子的原则,这里给出一个为数不多还算可以的实现短地址的开源项目:urlshorter

注意:urlshorter本身还是基于随机的方式生成短地址的,并不算是一个短地址发号器,因此会有性能问题和冲突的出现,和知乎用户iammutex 描述的实现方式还是有区别的!而关于短地址发号器的方式目前还没有找到更好的开源项目可供参考!

项目地址:https://gitee.com/tinyframework/urlshorter

2、使用SnowFlake发号器生成短地址

实现参考: https://github.com/beyondfengyu/SnowFlake http://www.wolfbe.com/detail/201611/381.html

Twitter的雪花算法SnowFlake,使用Java语言实现。

SnowFlake算法用来生成64位的ID,刚好可以用long整型存储,能够用于分布式系统中生产唯一的ID, 并且生成的ID有大致的顺序。 在这次实现中,生成的64位ID可以分成5个部分:

0 - 41位时间戳 - 5位数据中心标识 - 5位机器标识 - 12位序列号

5位数据中心标识、5位机器标识这样的分配仅仅是当前实现中分配的,如果业务有其实的需要,可以按其它的分配比例分配,如10位机器标识,不需要数据中心标识。

Java代码实现如下:

/**

* 进制转换工具,最大支持十进制和62进制的转换

* 1、将十进制的数字转换为指定进制的字符串;

* 2、将其它进制的数字(字符串形式)转换为十进制的数字

* @author xuliugen

* @date 2018/04/23

*/

public class NumericConvertUtils {

/**

* 在进制表示中的字符集合,0-Z分别用于表示最大为62进制的符号表示

*/

private static final char[] digits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',

'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',

'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'}

/**

* 将十进制的数字转换为指定进制的字符串

* @param number 十进制的数字

* @param seed 指定的进制

* @return 指定进制的字符串

*/

public static String toOtherNumberSystem(long number, int seed) {

if (number <0) {

number = ((long) 2 * 0x7fffffff) + number + 2

}

char[] buf = new char[32]

int charPos = 32

while ((number / seed) >0) {

buf[--charPos] = digits[(int) (number % seed)]

number /= seed

}

buf[--charPos] = digits[(int) (number % seed)]

return new String(buf, charPos, (32 - charPos))

}

/**

* 将其它进制的数字(字符串形式)转换为十进制的数字

* @param number 其它进制的数字(字符串形式)

* @param seed 指定的进制,也就是参数str的原始进制

* @return 十进制的数字

*/

public static long toDecimalNumber(String number, int seed) {

char[] charBuf = number.toCharArray()

if (seed == 10) {

return Long.parseLong(number)

}

long result = 0, base = 1

for (int i = charBuf.length - 1i >= 0i--) {

int index = 0

for (int j = 0, length = digits.lengthj <lengthj++) {

//找到对应字符的下标,对应的下标才是具体的数值

if (digits[j] == charBuf[i]) {

index = j

}

}

result += index * base

base *= seed

}

return result

}

}

/**

* Twitter的SnowFlake算法,使用SnowFlake算法生成一个整数,然后转化为62进制变成一个短地址URL

* @author beyond

* @author xuliugen

* @date 2018/04/23

*/

public class SnowFlakeShortUrl {

/**

* 起始的时间戳

*/

private final static long START_TIMESTAMP = 1480166465631L

/**

* 每一部分占用的位数

*/

private final static long SEQUENCE_BIT = 12 //序列号占用的位数

private final static long MACHINE_BIT = 5//机器标识占用的位数

private final static long DATA_CENTER_BIT = 5//数据中心占用的位数

/**

* 每一部分的最大值

*/

private final static long MAX_SEQUENCE = -1L ^ (-1L <<SEQUENCE_BIT)

private final static long MAX_MACHINE_NUM = -1L ^ (-1L <<MACHINE_BIT)

private final static long MAX_DATA_CENTER_NUM = -1L ^ (-1L <<DATA_CENTER_BIT)

/**

* 每一部分向左的位移

*/

private final static long MACHINE_LEFT = SEQUENCE_BIT

private final static long DATA_CENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT

private final static long TIMESTAMP_LEFT = DATA_CENTER_LEFT + DATA_CENTER_BIT

private long dataCenterId //数据中心

private long machineId//机器标识

private long sequence = 0L//序列号

private long lastTimeStamp = -1L //上一次时间戳

/**

* 根据指定的数据中心ID和机器标志ID生成指定的序列号

* @param dataCenterId 数据中心ID

* @param machineId机器标志ID

*/

public SnowFlake(long dataCenterId, long machineId) {

if (dataCenterId >MAX_DATA_CENTER_NUM || dataCenterId <0) {

throw new IllegalArgumentException("DtaCenterId can't be greater than MAX_DATA_CENTER_NUM or less than 0!")

}

if (machineId >MAX_MACHINE_NUM || machineId <0) {

throw new IllegalArgumentException("MachineId can't be greater than MAX_MACHINE_NUM or less than 0!")

}

this.dataCenterId = dataCenterId

this.machineId = machineId

}

/**

* 产生下一个ID

* @return

*/

public synchronized long nextId() {

long currTimeStamp = getNewTimeStamp()

if (currTimeStamp <lastTimeStamp) {

throw new RuntimeException("Clock moved backwards. Refusing to generate id")

}

if (currTimeStamp == lastTimeStamp) {

//相同毫秒内,序列号自增

sequence = (sequence + 1) &MAX_SEQUENCE

//同一毫秒的序列数已经达到最大

if (sequence == 0L) {

currTimeStamp = getNextMill()

}

} else {

//不同毫秒内,序列号置为0

sequence = 0L

}

lastTimeStamp = currTimeStamp

return (currTimeStamp - START_TIMESTAMP) <<TIMESTAMP_LEFT //时间戳部分

| dataCenterId <<DATA_CENTER_LEFT //数据中心部分

| machineId <<MACHINE_LEFT //机器标识部分

| sequence//序列号部分

}

private long getNextMill() {

long mill = getNewTimeStamp()

while (mill <= lastTimeStamp) {

mill = getNewTimeStamp()

}

return mill

}

private long getNewTimeStamp() {

return System.currentTimeMillis()

}

public static void main(String[] args) {

SnowFlake snowFlake = new SnowFlake(2, 3)

for (int i = 0i <(1 <<4)i++) {

//10进制

Long id = snowFlake.nextId()

//62进制

String convertedNumStr = NumericConvertUtils.toOtherNumberSystem(id, 62)

//10进制转化为62进制

System.out.println("10进制:" + id + " 62进制:" + convertedNumStr)

//TODO 执行具体的存储 *** 作,可以存放在Redis等中

//62进制转化为10进制

System.out.println("62进制:" + convertedNumStr + " 10进制:" + NumericConvertUtils.toDecimalNumber(convertedNumStr, 62))

System.out.println()

}

}

}

//生成结果:

10进制:185784275776581632 62进制:dITqmhW2


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8133955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存