1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/barat-ohurlshortener

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Почему это нужно делать?

Когда запрос на получение короткого URL поступает в приложение, для более быстрого и точного перенаправления пользователя по целевому URL, предпочтительнее получать целевой URL непосредственно из Redis, а не выполнять поиск в базе данных.

Есть ли у этого подхода недостатки?

Теоретически, если сервер, на котором расположен Redis, имеет достаточно большой объём памяти, можно хранить до 100 000 ключей. Однако, при ограниченных аппаратных условиях, необходимо контролировать количество ключей в Redis (основная причина — опасения, что машина не справится с нагрузкой, при этом производительность самого Redis не вызывает проблем). Расширение этой функции планируется реализовать в будущих версиях и разрешить управление конфигурацией.

На всякий случай

Для обеспечения расширяемости, добавлена дополнительная оболочка service, позволяющая при необходимости проводить пользовательские расширения в бизнес-логике, например, заменить поиск ключа запросом к базе данных и т. д.


Код, связанный с процессом создания коротких ссылок, находится в файле core/short_url.go:

func GenerateShortLink(initialLink string) (string, error) {
    if utils.EmptyString(initialLink) {
        return "", fmt.Errorf("empty string")
    }
    urlHash, err := utils.Sha256Of(initialLink)
    if err != nil {
        return "", err
    }
    str := utils.Base58Encode(urlHash)
    return str[:8], nil
}

Интервал очистки журналов доступа: 1 минута

В файле main.go:

// Очистка журналов доступа в Redis с интервалом времени
const AccessLogCleanInterval = 1 * time.Minute

func startTicker() error {
    ticker := time.NewTicker(AccessLogCleanInterval)
    for range ticker.C {
        log.Println("[StoreAccessLog] Start.")
        if err := service.StoreAccessLogs(); err != nil {
            log.Printf("Error while trying to store access_log %s", err)
        }
        log.Println("[StoreAccessLog] Finish.")
    }
    return nil
}

Обработка списка 25 самых популярных URL за день с интервалом: 5 минут

В файле main.go:

// Интервал вычисления списка Top25
Top25CalcInterval = 5 * time.Minute

func startTicker2() error {
    top25Ticker := time.NewTicker(Top25CalcInterval)
    for range top25Ticker.C {
        log.Println("[Top25Urls Ticker] Start.")
        if err := storage.CallProcedureStatsTop25(); err != nil {
            log.Printf("Error while trying to calculate Top25Urls %s", err)
        }
        log.Println("[Top25Urls Ticker] Finish.")
    }
    return nil
}

Обработка нескольких статистических данных на приборной панели с интервалом: 5 минут

В файле main.go:

// Интервалы вычисления других статистических данных на приборной панели
StatsSumCalcInterval = 5 * time.Minute

func startTicker4() error {
    statsSumTicker := time.NewTicker(StatsSumCalcInterval)
    for range statsSumTicker.C {
        log.Println("[StatsSum Ticker] Start.")
        if err := storage.CallProcedureStatsSum(); err != nil {
            log.Printf("Error while trying to calculate StatsSum %s", err)
        }
        log.Println("[StatsSum Ticker] Finish.")
    }
    return nil
}

Полная статистика посещений с интервалом: 30 минут

В файле main.go:

// Интервал анализа полной статистики посещений
StatsIpSumCalcInterval = 30 * time.Minute

func startTicker3() error {
    statsIpSumTicker := time.NewTicker(StatsIpSumCalcInterval)
    for range statsIpSumTicker.C {
        log.Println("[StatsIpSum Ticker] Start.")
        if err := storage.CallProcedureStatsIPSum(); err != nil {
            log.Printf("Error while trying to calculate StatsIpSum %s", err)
        }
        log.Println("[StatsIpSum Ticker] Finish.")
    }
    return nil
}

Лицензия

ohUrlShortener выпущен под лицензией Mulan PSL v2.

Copyright (c) [2023] [巴拉迪维]
[ohUrlShortener] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
         http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.

Соглашение о лицензии участника

При первом отправке запроса на вытягивание (Pull Request), пожалуйста, чётко укажите в содержании запроса «Я добровольно принимаю и подписываю Соглашение о лицензии ohUrlShortener Contributor License Agreement» и прикрепите ссылку на этот договор к запросу.

Благодарности

Искренняя благодарность следующим открытым исходным кодам, фреймворкам и другим ресурсам (включая, но не ограничиваясь):

  1. gin-gonic/gin
  2. FomanticUI
  3. dchest/captcha
  4. Masterminds/sprig
  5. go-redis/redis
  6. jmoiron/sqlx
  7. go-ini/ini

Ссылки

  1. ohUrlShortener: выпущена версия 2.0 системы коротких URL с поддержкой «способа открытия».

  2. ohUrlShortener: выпущена версия 1.9 системы коротких URL, использующая Redis. Кластер 集群支持

  3. Выпущена версия ohUrlShortener 1.8 системы коротких ссылок, решены проблемы с API.

  4. Выпущена версия ohUrlShortener 1.7 системы коротких ссылок с обновлением безопасности.

  5. Выпущена версия ohUrlShortener 1.6 системы коротких ссылок с улучшенными статистическими функциями.

  6. Выпущена версия ohUrlShortener 1.5 системы коротких ссылок с расширенными функциями управления.

  7. Официально выпущена версия ohUrlShortener 1.4 системы коротких ссылок.

  8. Выпущена версия ohUrlShortener 1.3 системы коротких ссылок с поддержкой экспорта журналов доступа.

  9. Официально выпущен ohUrlShortener 1.2 системы коротких ссылок.

  10. Выпущен ohUrlShortener версии 1.0 — сервис коротких ссылок.

  11. Информация о программном обеспечении: https://www.oschina.net/p/ohurlshortener.

  12. Gitee: https://gitee.com/barat/ohurlshortener.

  13. Github: https://github.com/barats/ohUrlShortener.

  14. Gitlink: https://www.gitlink.org.cn/baladiwei/ohurlshortener.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MulanPSL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/barat-ohurlshortener.git
git@api.gitlife.ru:oschina-mirror/barat-ohurlshortener.git
oschina-mirror
barat-ohurlshortener
barat-ohurlshortener
main