Skip to content

Latest commit

 

History

History
60 lines (39 loc) · 2.96 KB

README.md

File metadata and controls

60 lines (39 loc) · 2.96 KB

Управление Флудом (Flood Control)

Этот проект представляет собой простой пример реализации механизма управления флудом (Flood Control) с использованием Redis в качестве хранилища данных.

Использование

  1. Установите зависимости проекта:
go mod tidy
  1. Запускаем Redis:
redis-server
  1. Запустите приложение:
go run app/main.go -config=<config path>

Конфигурация

Конфигурационный файл config/config_local.yaml содержит параметры подключения к Redis и настройки управления. Пример конфигурации:

redis:
  address: "localhost:6379"
  password: ""
  db: 0
floodControl:
  requestLimit: 40
  periodSeconds: 60

Почему Redis?

Redis был выбран в качестве хранилища данных для управления флудом по следующим причинам:

  • Высокая производительность: Redis обеспечивает быстрый доступ к данным благодаря хранению данных в памяти и использованию оптимизированных структур данных.

  • Поддержка структур данных для контроля флуда: В данном проекте используется структура данных Sorted Set для хранения временных меток запросов пользователя, что обеспечивает эффективную проверку количества запросов за определенный период времени.

  • Масштабируемость и отказоустойчивость: Redis поддерживает кластеризацию для масштабирования и обеспечения отказоустойчивости, что делает его подходящим выбором для высоконагруженных приложений.

Примеры тестов

Проект включает в себя как unit-тесты, так и интеграционные тесты для проверки функциональности управления флудом. Вы можете запустить тесты с помощью команды:

go test ./...

Про проект

Изначально хотел написать что-то на redis, тут выпала такая возможность, ведь транзакции это круто. Прочитав про пакеты связанные с редисом, нашел и Sorted Set. Спасибо за таск, освоил что-то новое.

P.S. Не судите строго 0-0