Skip to content

Compogo/memcached

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Compogo Memcached 📦

Compogo Memcached — это полноценный Memcached-клиент для Compogo, построенный поверх популярной библиотеки bradfitz/gomemcache. Предоставляет полный API оригинальной библиотеки, настраивается через флаги и может использоваться как самостоятельный кэш или как драйвер для централизованной системы кэширования Compogo Cache.

🚀 Установка

go get github.com/Compogo/memcached

📦 Быстрый старт

package main

import (
    "github.com/Compogo/compogo"
    "github.com/Compogo/memcached"
    "github.com/bradfitz/gomemcache/memcache"
)

func main() {
    app := compogo.NewApp("myapp",
        compogo.WithOsSignalCloser(),
        memcached.Component,  // добавляем Memcached-клиент
        compogo.WithComponents(
            userServiceComponent,
        ),
    )

    if err := app.Serve(); err != nil {
        panic(err)
    }
}

// Использование в сервисе
var userServiceComponent = &component.Component{
    Dependencies: component.Components{memcached.Component},
    Execute: component.StepFunc(func(c container.Container) error {
        return c.Invoke(func(cache memcached.Cache) {
            service := &UserService{cache: cache}
            service.Start()
        })
    }),
}

type UserService struct {
    cache memcached.Cache
}

func (s *UserService) GetUser(ctx context.Context, id int) (*User, error) {
    // Пытаемся достать из кэша
    item, err := s.cache.Get(fmt.Sprintf("user:%d", id))
    if err == nil {
        var user User
        json.Unmarshal(item.Value, &user)
        return &user, nil
    }
    
    // Нет в кэше — грузим из БД
    user, err := s.db.LoadUser(id)
    if err != nil {
        return nil, err
    }
    
    // Кладём в кэш
    data, _ := json.Marshal(user)
    s.cache.Set(&memcache.Item{
        Key:        fmt.Sprintf("user:%d", id),
        Value:      data,
        Expiration: 300, // 5 минут
    })
    
    return user, nil
}

✨ Возможности

🎯 Полный API gomemcache

Интерфейс Cache повторяет все методы оригинальной библиотеки:

// Базовые операции
cache.Set(&memcache.Item{Key: "key", Value: data})
item, err := cache.Get("key")
cache.Delete("key")

// Множественное чтение
items, err := cache.GetMulti([]string{"key1", "key2"})

// Атомарные операции
newVal, _ := cache.Increment("counter", 1)
newVal, _ := cache.Decrement("counter", 1)

// Условное обновление
err := cache.CompareAndSwap(&memcache.Item{
    Key:        "key",
    Value:      newData,
    Expiration: 300,
})

// Модификация данных
cache.Append(&memcache.Item{Key: "log", Value: []byte("new line")})
cache.Prepend(&memcache.Item{Key: "log", Value: []byte("header")})

// Управление сроком жизни
cache.Touch("key", 600) // продлить на 10 минут

// Проверка подключения
err := cache.Ping()

// Массовые операции
cache.FlushAll()   // очистить всё
cache.DeleteAll()  // удалить всё

🔌 Два способа использования

Как самостоятельный Memcached-клиент:

type Service struct {
    cache memcached.Cache  // через интерфейс
    // или
    raw *memcache.Client    // напрямую
}

Как драйвер для централизованной системы кэширования:

import (
    "github.com/Compogo/cache"
    "github.com/Compogo/memcached/registration"
)

app := compogo.NewApp("myapp",
    cache.Component,
    memcached.Component,
    registration.Component,  // регистрирует "memcached" драйвер
)

// Теперь можно использовать через cache.CacheInterface[[]byte]
// с флагом --cache.driver=memcached

About

Compogo Memcached — это полноценный Memcached-клиент для Compogo, построенный поверх популярной библиотеки bradfitz/gomemcache.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages