资讯专栏INFORMATION COLUMN

基于Redis作为发号器生成短网址Python实践

trilever / 1684人阅读

摘要:实现发号器使用的函数个字符作为进制符号转成进制为代码作为发号器生成短网址,假如域名为通过解码到原本文为原创首发于继续阅读全文

描述

如何将长地址URL转换为短地址URL,一个比较理想的解决方案就是使用发号器生成一个唯一的整数ID,然后转换为62进制,作为短地址URL。

实现
发号器使用 Redis 的 incr 函数

incr("SID") 
// 62个字符作为62进制符号
0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ-_
12345678 转成 62 进制为 RPGS
代码
# python 
import redis
class ShortenURL:
    _alphabet = "0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ-_"
    _base = len(_alphabet)
    def encode(self, number):
        string = ""
        while(number > 0):
            string = self._alphabet[number % self._base] + string
            number //= self._base
        return string
    def decode(self, string):
        number = 0
        for char in string:
            number = number * self._base + self._alphabet.index(char)
        return number
t = ShortenURL()
# Redis 作为ID发号器 
r = redis.StrictRedis(host="127.0.0.1", port=6379, db=0,password="hooyes")
if r.exists("SID") != 1:
    r.set("SID",12345677)
r.incr("SID")
sid = int(r.get("SID"))

# 生成短网址,假如域名为 85.si
sn = t.encode(sid)
shorturl = "https://85.si/" + sn
print(shorturl)

# 通过 ShortURL SN 解码到原SID
print(t.decode(sn))

本文为hooyes原创首发于 hooyes.net

继续阅读全文

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41593.html

相关文章

  • 链接原理分析

    摘要:举个例子,第一个进来的链接发号器发号,对应的短链接为,第二个进来的链接发号器发号,对应的短链接为,以此类推。这样一来会导致一条长链接对应多条短链接的情况出现,不仅浪费存储空间,又浪费发号器资源。 1. 什么是短链接 顾名思义,短链接即是长度较短的网址。通过短链接技术,我们可以将长度较长的链接压缩成较短的链接。并通过跳转的方式,将用户请求由短链接重定向到长链接上去。短链接主要用在诸如微博...

    SexySix 评论0 收藏0
  • 分布式系统全局号器的几点思考

    摘要:为什么需要发号器在分布式系统中,经常需要对大量的数据消息请求等进行唯一标识,例如对于分布式系统,服务间相互调用需要唯一标识,调用链路分析,日志追踪的时候需要使用这个唯一标识。 原文链接:何晓东 博客 文章起源于 康神交流群的 panda大佬和boss li关于发号器的一些交流,特此感谢让我们学到了新知识。 为什么需要发号器 在分布式系统中,经常需要对大量的数据、消息、http 请求等进...

    dayday_up 评论0 收藏0

发表评论

0条评论

trilever

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<