> Использовали ли кэши в Go, например Redis, и как кэшировали (Redis, Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Wildberries
Стек: Redis, Go
> Пример ответа
Да, в Go я активно использовал Redis для кэширования. Основной подход - библиотека go-redis/redis для работы с кластером или одиночным инстансом.
Кэшировал данные по шаблону Cache-Aside: при запросе сначала проверяю Redis по ключу, если промах - загружаю из БД, сохраняю в кэш с TTL и возвращаю. Например, для списка товаров:
GOfunc GetProducts(ctx context.Context, ids []string) ([]Product, error) {keys := make([]string, len(ids))for i, id := range ids {keys[i] = "product:" + id}// Пайплайн для массового чтенияresults, err := rdb.MGet(ctx, keys...).Result()if err != nil {return nil, err}var products []Productvar missingIDs []stringfor i, val := range results {if val != nil {var p Productjson.Unmarshal([]byte(val.(string)), &p)products = append(products, p)} else {missingIDs = append(missingIDs, ids[i])}}if len(missingIDs) > 0 {// Загрузка из БДdbProducts := loadFromDB(missingIDs)// Сохранение в кэш с TTL 5 минутpipe := rdb.Pipeline()for _, p := range dbProducts {data, _ := json.Marshal(p)pipe.Set(ctx, "product:"+p.ID, data, 5*time.Minute)}pipe.Exec(ctx)products = append(products, dbProducts...)}return products, nil}
Также использовал Redis для:
-
Инвалидации кэша - удаление ключей при обновлении данных (например,
DEL product:123). -
Rate limiting - счётчики через
INCRиEXPIRE. -
Сессий - хранение JWT-токенов с TTL.
-
Очередей - через
BRPOPдля фоновых задач.
Важно: сериализация через JSON/msgpack, мониторинг попаданий через INFO commandstats, установка разумного TTL (от секунд до часов) в зависимости от частоты обновления данных.
> Похожие задачи по backend
Что лучше использовать в Go: int8, int32, int64 или просто int
Писали ли интеграционные тесты или моки для сервисов с Dependency Injection
Какой формат данных выбрать для клиента: JSON, YAML или XML и почему
Что такое WebSocket и как он работает
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью