Documentation ¶
Overview ¶
Реализует кеш для работы с идемпотентностью
Вся работа осуществляется через idmpt.Cache, при старте сервиса необходимо вызвать InitCache для инициализации кеша и запуска мусорщика (мусорщик работает с периодичностью параметра LockDelay тоесть время жизни блокировки)
Логика работы:
- Get - ищет в кеше запись по ключу, если находит то возвращает данные либо ошибку если это блокировка, иначе идет дальше
- Lock - выполняется первым, создает запись в кеше с небольшим временем жизни. Нужна для отбрасывания одинаковых запросов (тк первый запрос заблокировал ключ раньше то последующие будут падать с ошибкой, пока не выполнится первый)
- handle - функция идущая выше по стеку, возвращает ошибку и данные
- Unlock - если handle вернул ошибку то убираем блокировку с ключа, чтобы новые запросы (например из ретрая) прошли без проблем
- 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 SetTTLLock ¶
Types ¶
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() }
Click to show internal directories.
Click to hide internal directories.