candycache/README.md

126 lines
5.4 KiB
Markdown
Raw Normal View History

2025-01-06 01:02:55 +03:00
# ![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white) Candy Cache :candy:
2025-01-06 00:44:03 +03:00
2025-01-06 01:21:42 +03:00
**CandyCache** — это простой и эффективный кэш на языке Go, который позволяет хранить данные с ограниченным временем жизни (TTL).
2025-01-06 01:00:23 +03:00
2025-01-06 01:24:59 +03:00
# Установка
2025-01-06 01:00:23 +03:00
2025-01-06 01:26:40 +03:00
Для использования CandyCache в вашем проекте, установите его, используя ```go get git.hikan.ru/serr/candycache```, далее просто добавьте в блок импорта.
2025-01-06 01:00:23 +03:00
2025-01-06 01:24:59 +03:00
# Основные возможности
2025-01-06 01:00:23 +03:00
2025-01-06 01:30:42 +03:00
- **Автоматика**: автоматическая очистка устаревших элементов и возможность ее отключения.
- **Возможность ручного управления**.
- **Безопасность**: конкурентный доступ к данным возможен благодаря мьютексам.
- **Гибкость**: кэш может хранить любые типы данных.
2025-01-06 01:13:25 +03:00
2025-01-06 01:24:59 +03:00
# Использование
2025-01-06 01:13:25 +03:00
2025-01-06 01:24:59 +03:00
## Создание кэша
2025-01-06 01:13:25 +03:00
2025-01-06 01:26:40 +03:00
### С автоматической очисткой
2025-01-06 01:18:35 +03:00
Для создания нового экземпляра кэша используйте функцию **Cacher**, передавая интервал очистки в наносекундах.
2025-01-06 01:19:02 +03:00
2025-01-06 01:24:25 +03:00
Если требуется указать интервал в секундах/минутах/часах и т.д. - используйте множители из пакета **time**:
2025-01-06 01:17:53 +03:00
```go
cache := candycache.Cacher(10 * time.Minute) // Очистка каждые 10 минут
```
2025-01-06 01:13:25 +03:00
2025-01-06 01:26:40 +03:00
### Без автоматической очистки
2025-01-06 01:24:25 +03:00
Если автоматичская очистка не нужна - просто передайте параметром любое отрицательное число:
```go
cache := candycache.Cacher(-1) // Кэш не будет очищаться автоматически
```
2025-01-06 01:24:59 +03:00
## Добавление элемента
2025-01-06 01:13:25 +03:00
Для добавления элемента в кэш используйте метод **Add**:
2025-01-06 01:17:53 +03:00
```go
2025-01-06 01:24:25 +03:00
cache.Add("key", "value", 5 * time.Minute) // Элемент будет считаться устаревшим через 5 минут
2025-01-06 01:17:53 +03:00
```
2025-01-06 01:13:25 +03:00
В случае, если по указанном ключу уже что-то хранится, оно будет заменено на новый элемент.
2025-01-06 01:24:59 +03:00
## Получение элемента
2025-01-06 01:13:25 +03:00
Для получения элемента из кэша используйте метод **Get**:
2025-01-06 01:17:53 +03:00
```go
value, found := cache.Get("key") // Получение значения по ключу "key"
```
2025-01-06 01:36:39 +03:00
Если элемент найден, то в переменную **value** будет записано значение, а в **found** - **true**. Если элемент не найден, то в **found** будет записано **false**, а значением вернется **nil**.
2025-01-06 01:29:44 +03:00
## Удаление элемента
Для удаления элемента по ключу используйте метод **Delete**:
```go
err := cache.Delete("key1")
if err != nil {
fmt.Println("Ошибка:", err) // Не найдено записи по ключу
}
```
2025-01-06 01:36:39 +03:00
Элемент будет удален, не смотря на то, устаревший он или нет.
## Массовое удаление элементов
### Удаление устаревших элементов
Для удаления устаревших элементов используйте метод **Cleanup**:
```go
cache.Cleanup() // Перебирает все элементы кэша, удаляет устаревшие
```
### Удаление всех элементво кэша
Для полной очистки кэша используйте метод **Flush**:
```go
cache.Flush() // Удаляет все элементы кэша, не смотря на то, устаревшие они или нет
2025-01-06 01:40:45 +03:00
```
2025-01-06 01:50:45 +03:00
## Получение информации о кэше
### Получение списка элементов
2025-01-06 01:40:45 +03:00
Для получения списка всех элементов в кэше используйте метод **List**:
```go
2025-01-06 01:54:18 +03:00
items := cache.List() // Список всех элементов кэша
2025-01-06 01:41:01 +03:00
for _, item := range items {
fmt.Printf("Ключ: %s, Значение: %v, Момент устаревания: %d\n", item.Key, item.Item.Data(), item.Item.DestroyTimestamp())
}
2025-01-06 01:50:45 +03:00
```
### Получение количества элементов
Для получения количества элементов в кэше используйте метод **Count**:
```go
2025-01-06 01:54:18 +03:00
count := cache.Count() // Количество элементов в кэше
2025-01-06 01:50:45 +03:00
```
### Получение размера кэша
Для получения размера всего кэша в байтах используйте метод **Size**:
```go
2025-01-06 01:54:18 +03:00
size := cache.Size() // Размер кэша в байтах
2025-01-06 01:50:45 +03:00
```
Данный метод возвращает корректное значение, если в кэше элементы представлены этими типами данных:
```go
bool
int, int8, int16, int32, int64
uint, uint8, uint16, uint32, uint64, uintptr
float32, float64
complex64, complex128
array, slice, string
map, struct, func
```
И композициями этих типов.