package cache import "context" type Cache interface { // Set sets the value for the given key in the cache. Set(ctx context.Context, key string, value string, opts ...Option) error // SetOrFail is like Set, but returns ErrKeyExists if the key already exists. SetOrFail(ctx context.Context, key string, value string, opts ...Option) error // Get gets the value for the given key from the cache. // // If the key is not found, it returns ErrKeyNotFound. // If the key has expired, it returns ErrKeyExpired. // Otherwise, it returns the value and nil. Get(ctx context.Context, key string) (string, error) // GetAndDelete is like Get, but also deletes the key from the cache. GetAndDelete(ctx context.Context, key string) (string, error) // Delete removes the item associated with the given key from the cache. // If the key does not exist, it performs no action and returns nil. // The operation is safe for concurrent use. Delete(ctx context.Context, key string) error // Cleanup removes all expired items from the cache. // The operation is safe for concurrent use. Cleanup(ctx context.Context) error // Drain returns a map of all the non-expired items in the cache. // The returned map is a snapshot of the cache at the time of the call. // The cache is cleared after the call. // The operation is safe for concurrent use. Drain(ctx context.Context) (map[string]string, error) }