idmpt

package module
v0.0.0-...-e5ff2c7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 4, 2023 License: MIT Imports: 7 Imported by: 0

README

idmpt

idempotent of cashe

Documentation

Overview

Реализует кеш для работы с идемпотентностью

Вся работа осуществляется через idmpt.Cache, при старте сервиса необходимо вызвать InitCache для инициализации кеша и запуска мусорщика (мусорщик работает с периодичностью параметра LockDelay тоесть время жизни блокировки)

Логика работы:

  1. Get - ищет в кеше запись по ключу, если находит то возвращает данные либо ошибку если это блокировка, иначе идет дальше
  2. Lock - выполняется первым, создает запись в кеше с небольшим временем жизни. Нужна для отбрасывания одинаковых запросов (тк первый запрос заблокировал ключ раньше то последующие будут падать с ошибкой, пока не выполнится первый)
  3. handle - функция идущая выше по стеку, возвращает ошибку и данные
  4. Unlock - если handle вернул ошибку то убираем блокировку с ключа, чтобы новые запросы (например из ретрая) прошли без проблем
  5. Save - сохранят данные по ключу, убирая блокировку, и устанавливает новое значение времени жизни

Index

Constants

View Source
const (
	CacheErrorCode = iota + 100
)

Variables

View Source
var (
	LockExistsError     = errors.New("lock already exists")
	LockNotFoundError   = errors.New("lock not found")
	LockExistsSaveError = errors.New("can't create lock, item already save")
	ItemExistsError     = errors.New("item already exists")
	ItemNotFound        = errors.New("item not found")
	ItemExpiredError    = errors.New("item already expired")
)
View Source
var Cache *idmptCache

Инстанс кеша для идемпотентности

View Source
var (

	// Ключ для хедера
	HeaderIdempotentKey = "X-MTS-IDMPT-KEY"
)

Functions

func EnabledUnique

func EnabledUnique() option

func InitCache

func InitCache(ctx context.Context, conf *Config)

Инициализация кеша и установка своих параметров

func SetTTL

func SetTTL(ttl time.Duration) option

func SetTTLLock

func SetTTLLock(ttl time.Duration) option

Types

type Config

type Config struct {
	LockDelay time.Duration
	Ttl       time.Duration
	SizeStore int
}

type IStore

type IStore interface {
	// Получить данные по ключу
	Get(key uuid.UUID) (data []byte, err error)
	// Сохранить данные по ключу
	Set(key uuid.UUID, data []byte) error
	// Создать презапись сохранения данных
	Lock(key uuid.UUID) error
	// Удалить презапись сохранения данных
	Unlock(key uuid.UUID)
	Reset()
	Clear()
}

func NewStore

func NewStore(countBucket byte, opts ...option) IStore

type Option

type Option func() option

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL