Skip to content

17HIERARCH70/flood-control

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Управление Флудом (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

About

flood control task for vk

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages