Short URL generation conversion
Main logic:
1, determine a string LS including uppercase and lowercase letters and data, with a length of L = 26+26+10 = 62
2, initialize L**N integers, and push them as a sequence In redis
3, when you need to convert a long URL, first randomly pop out an integer I
4 from the above sequence, take the modulo of the integer I (the divisor is L), the remainder corresponds to a letter of LS, take After the modulus is completed, divide by L and round. When the result is equal to 0, stop modulo division, otherwise the result will continue to be modulo.
5, arrange the letters corresponding to all remainders in order to get a short string SS
6, use the md5 hash value of the long URL as KEY, use the string SS as VALUE, write it into redis
7, String SS as KEY, long URL as VALUE, write to redis
8, add prefix (short URL domain name) to string SS, return as short URL result
9, when the user uses short URL to access, will Take out the string SS in the short URL and use it as KEY to take out the long URL from redis and jump to the long URL
Note:
When the sequence numbers in redis are almost used up, increase them in time (you can write a script to monitor at any time, The quantity will be automatically increased when the quantity is less than 10%), do not save numbers that have been used
#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)

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Regarding the problem of removing the Python interpreter that comes with Linux systems, many Linux distributions will preinstall the Python interpreter when installed, and it does not use the package manager...

Pylance type detection problem solution when using custom decorator In Python programming, decorator is a powerful tool that can be used to add rows...

About Pythonasyncio...

Using python in Linux terminal...

Loading pickle file in Python 3.6 environment error: ModuleNotFoundError:Nomodulenamed...

Compatibility issues between Python asynchronous libraries In Python, asynchronous programming has become the process of high concurrency and I/O...

Error loading Pickle file in Python 3.6 environment: ModuleNotFoundError:Nomodulenamed...

The problem and solution of the child process continuing to run when using signals to kill the parent process. In Python programming, after killing the parent process through signals, the child process still...
