Когда вредно использовать Cash

«Когда вредно использовать Cash» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Кэширование может навредить, если данные часто меняются — кэш становится неактуальным, что приводит к ошибкам. Также не стоит кэшировать чувствительные данные (пароли, токены) без шифрования.

Пример плохого кэширования:

var cache map[string]string // Глобальный кэш без TTL и инвалидации

func GetUser(id string) string {
    if val, ok := cache[id]; ok {
        return val // Может вернуть устаревшие данные
    }
    // Загрузка из БД и сохранение в кэш
    data := fetchFromDB(id)
    cache[id] = data
    return data
}

Проблемы:

  • Нет механизма обновления кэша
  • Нет контроля за памятью (может вырасти до OOM)
  • Нет обработки конкурентного доступа (data race)

Лучше использовать кэш с TTL (например, github.com/patrickmn/go-cache) или инвалидацией по событиям.