Простое кэширование на Go
Go to file
serr e4c2c92d95 readme md 2025-01-06 01:50:45 +03:00
README.md readme md 2025-01-06 01:50:45 +03:00
candycache.go delete a few words 2025-01-06 00:16:20 +03:00

README.md

Go Candy Cache 🍬

CandyCache — это простой и эффективный кэш на языке Go, который позволяет хранить данные с ограниченным временем жизни (TTL).

Установка

Для использования CandyCache в вашем проекте, установите его, используя go get git.hikan.ru/serr/candycache, далее просто добавьте в блок импорта.

Основные возможности

  • Автоматика: автоматическая очистка устаревших элементов и возможность ее отключения.
  • Возможность ручного управления.
  • Безопасность: конкурентный доступ к данным возможен благодаря мьютексам.
  • Гибкость: кэш может хранить любые типы данных.

Использование

Создание кэша

С автоматической очисткой

Для создания нового экземпляра кэша используйте функцию Cacher, передавая интервал очистки в наносекундах.

Если требуется указать интервал в секундах/минутах/часах и т.д. - используйте множители из пакета time:

cache := candycache.Cacher(10 * time.Minute) // Очистка каждые 10 минут

Без автоматической очистки

Если автоматичская очистка не нужна - просто передайте параметром любое отрицательное число:

cache := candycache.Cacher(-1) // Кэш не будет очищаться автоматически

Добавление элемента

Для добавления элемента в кэш используйте метод Add:

cache.Add("key", "value", 5 * time.Minute) // Элемент будет считаться устаревшим через 5 минут

В случае, если по указанном ключу уже что-то хранится, оно будет заменено на новый элемент.

Получение элемента

Для получения элемента из кэша используйте метод Get:

value, found := cache.Get("key") // Получение значения по ключу "key"

Если элемент найден, то в переменную value будет записано значение, а в found - true. Если элемент не найден, то в found будет записано false, а значением вернется nil.

Удаление элемента

Для удаления элемента по ключу используйте метод Delete:

err := cache.Delete("key1")
if err != nil {
    fmt.Println("Ошибка:", err) // Не найдено записи по ключу
}

Элемент будет удален, не смотря на то, устаревший он или нет.

Массовое удаление элементов

Удаление устаревших элементов

Для удаления устаревших элементов используйте метод Cleanup:

cache.Cleanup() // Перебирает все элементы кэша, удаляет устаревшие

Удаление всех элементво кэша

Для полной очистки кэша используйте метод Flush:

cache.Flush() // Удаляет все элементы кэша, не смотря на то, устаревшие они или нет

Получение информации о кэше

Получение списка элементов

Для получения списка всех элементов в кэше используйте метод List:

items := cache.List()
for _, item := range items {
    fmt.Printf("Ключ: %s, Значение: %v, Момент устаревания: %d\n", item.Key, item.Item.Data(), item.Item.DestroyTimestamp())
}

Получение количества элементов

Для получения количества элементов в кэше используйте метод Count:

count := cache.Count()

Получение размера кэша

Для получения размера всего кэша в байтах используйте метод Size:

size := cache.Size()

Данный метод возвращает корректное значение, если в кэше элементы представлены этими типами данных:

bool
int, int8, int16, int32, int64
uint, uint8, uint16, uint32, uint64, uintptr
float32, float64
complex64, complex128
array, slice, string
map, struct, func

И композициями этих типов.