Расскажите о ситуации, когда вам удалось повысить эффективность работы REST API.
Ответ от нейросети
sobes.tech AI
В одном из проектов на Go я повысил эффективность REST API, оптимизировав обработку запросов и уменьшив время отклика.
Что было сделано:
-
Кэширование: добавил кэширование часто запрашиваемых данных с помощью in-memory кэша (например, Redis или встроенный map с mutex), чтобы снизить нагрузку на базу данных.
-
Параллельная обработка: использовал горутины для параллельного выполнения независимых операций внутри обработки запроса.
-
Оптимизация запросов к базе: переписал SQL-запросы, добавил индексы, чтобы уменьшить время выполнения.
-
Использование контекста (context.Context): для своевременного прерывания долгих запросов и освобождения ресурсов.
Пример кода с кэшированием и горутинами:
var cache = make(map[string]string)
var mu sync.RWMutex
func getData(key string) (string, error) {
mu.RLock()
if val, ok := cache[key]; ok {
mu.RUnlock()
return val, nil
}
mu.RUnlock()
// Имитация запроса к базе
data := "данные из БД для " + key
mu.Lock()
cache[key] = data
mu.Unlock()
return data, nil
}
func handler(w http.ResponseWriter, r *http.Request) {
key := r.URL.Query().Get("key")
// Параллельное получение данных
var wg sync.WaitGroup
var result string
var err error
wg.Add(1)
go func() {
defer wg.Done()
result, err = getData(key)
}()
wg.Wait()
if err != nil {
http.Error(w, "Ошибка", http.StatusInternalServerError)
return
}
w.Write([]byte(result))
}
В результате время отклика API снизилось, а нагрузка на базу уменьшилась, что повысило общую производительность сервиса.