# Go Redis Inventory A Go library for managing inventory using Redis. ## Features - Get and update inventory quantities - Reserve inventory with atomic operations using Lua scripts - Temporary cart-based reservations with expiration to prevent overselling - Optimized available inventory calculation using maintained reservation totals - Listen to inventory changes via Redis pub/sub ## Installation ```bash go get github.com/matst80/go-redis-inventory ``` ## Usage Import the package: ```go import "git.k6n.net/go-redis-inventory/pkg/inventory" ``` Create a Redis client and initialize the service: ```go client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", }) service, err := inventory.NewRedisInventoryService(client) if err != nil { log.Fatal(err) } ``` For cart reservations: ```go cartService, err := inventory.NewRedisCartReservationService(client) if err != nil { log.Fatal(err) } // Reserve items for a cart with 10-minute TTL err = cartService.ReserveForCart(ctx, inventory.CartReserveRequest{ InventoryReference: &inventory.InventoryReference{SKU: "item1", LocationID: "warehouse1"}, CartID: "cart123", Quantity: 2, TTL: 10 * time.Minute, }) // Get available inventory (accounting for reservations) available, err := cartService.GetAvailableInventory(ctx, "item1", "warehouse1") // Get reservation summary for an item summary, err := cartService.GetReservationSummary(ctx, "item1", "warehouse1") fmt.Printf("Reservations: %d, Next release: %v, Remaining: %d\n", summary.ReservationCount, summary.EarliestRelease, summary.RemainingItems) ``` ## Dependencies - Go 1.25.1 or later - Redis server - [github.com/redis/go-redis/v9](https://github.com/redis/go-redis)