Ir al contenido

Vista General de Almacenamiento

GoPotency requiere un soporte de almacenamiento para persistir los registros de las solicitudes y gestionar los bloqueos distribuidos. La elección del almacenamiento afecta el rendimiento, la escalabilidad y la durabilidad de tu sistema de idempotencia.

El soporte de almacenamiento maneja dos tareas críticas:

  1. Caché de Resultados: Almacenar el cuerpo de la respuesta, el código de estado y los encabezados para que puedan ser repetidos.
  2. Control de Concurrencia: Manejar bloqueos atómicos para asegurar que dos solicitudes idénticas no comiencen a procesarse exactamente al mismo tiempo.
SoporteMejor Caso de Uso¿Distribuido?Complejidad
En MemoriaDesarrollo, Pruebas, Nodo ÚnicoNoMuy Baja
RedisAPIs Distribuidas de Gran EscalaMedia
SQLPostgres/SQLite, dependencias mínimasMedia
GORMProyectos que ya usan GORMBaja

Si necesitas soportar una base de datos diferente (por ejemplo, MongoDB, DynamoDB), puedes implementar la interfaz Storage:

type Storage interface {
Get(ctx context.Context, key string) (*idempotency.Record, error)
Set(ctx context.Context, record *idempotency.Record, ttl time.Duration) error
Delete(ctx context.Context, key string) error
Exists(ctx context.Context, key string) (bool, error)
TryLock(ctx context.Context, key string, ttl time.Duration) (bool, error)
Unlock(ctx context.Context, key string) error
Close() error
}