Sobes.tech
Назад к вопросам
Middle+
4

Работал ли ты с кэшированием? Если да, то с каким?

Компании, где спрашивали
МТСМТС

Ответ от нейросети

sobes.tech AI

Да, в проектах на Go я использовал кэширование для повышения производительности и снижения нагрузки на базу данных. В основном работал с:

  • Встроенным кэшем в памяти с использованием map и sync.RWMutex для потокобезопасности.
  • Redis как внешний кэш для распределённых систем, используя библиотеку go-redis.

Пример простого кэша в памяти:

package main

import (
    "sync"
    "time"
)

type Cache struct {
    mu    sync.RWMutex
    store map[string]string
}

func NewCache() *Cache {
    return &Cache{store: make(map[string]string)}
}

func (c *Cache) Get(key string) (string, bool) {
    c.mu.RLock()
    defer c.mu.RUnlock()
    val, ok := c.store[key]
    return val, ok
}

func (c *Cache) Set(key, value string) {
    c.mu.Lock()
    defer c.mu.Unlock()
    c.store[key] = value
}

func main() {
    cache := NewCache()
    cache.Set("user_1", "John Doe")
    if val, ok := cache.Get("user_1"); ok {
        println(val) // John Doe
    }
    // Можно добавить логику очистки по времени и т.д.
}

Такой подход помогает уменьшить количество запросов к медленным источникам данных и ускорить отклик сервиса.