Качественное решение Node.js / JavaScript см. В модуле id-shorttener , который тщательно протестирован и уже несколько месяцев используется в производстве.
Он обеспечивает эффективное сокращение идентификатора / URL, поддерживаемое сменным хранилищем по умолчанию Redis , и вы даже можете настроить свой набор символов короткого идентификатора и определить, является ли сокращение 10000 * idempotent . Это важное различие, которое учитывают не все средства сокращения URL.
По отношению к другим ответам здесь, этот модуль реализует превосходный принятый ответ Марселя Джекверта выше.
Основу решения обеспечивает следующий фрагмент Redis Lua :
local sequence = redis.call('incr', KEYS[1])
local chars = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ_abcdefghijkmnopqrstuvwxyz'
local remaining = sequence
local slug = ''
while (remaining > 0) do
local d = (remaining % 60)
local character = string.sub(chars, d + 1, d + 1)
slug = character .. slug
remaining = (remaining - d) / 60
end
redis.call('hset', KEYS[2], slug, ARGV[1])
return slug