修复文件

This commit is contained in:
2025-07-02 22:39:21 +08:00
parent 3b3ec8ea7d
commit b46312c428
21 changed files with 2233 additions and 650 deletions

135
CLAUDE.md Normal file
View File

@@ -0,0 +1,135 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
FlashSaleSystem is a high-concurrency flash sale (秒杀) system built with Spring Boot and Redis Cluster. The system
implements distributed architecture with anti-overselling mechanisms, rate limiting, and distributed locking using Redis
and Lua scripts.
**Project Completion**: 90%
## Core Architecture
### Technology Stack
- **Backend**: Spring Boot 2.7.6, Java 1.8
- **Database**: MySQL with JPA/Hibernate
- **Cache**: Redis Cluster with Redisson
- **Frontend**: JSP + JSTL + Bootstrap 5 + jQuery
- **Build Tool**: Maven
- **API Documentation**: Knife4j (Swagger)
### Key Components
- **Controllers**: Handle HTTP requests for different modules (flash sales, cart, orders, admin)
- **Services**: Business logic layer with Redis-based caching and distributed operations
- **Repositories**: JPA data access layer for MySQL operations
- **DTOs**: Data transfer objects for API communication
- **Entities**: JPA entities mapping to database tables
### Redis Integration
- **Cluster Configuration**: Multi-node Redis cluster setup via RedissonConfig
- **Data Types**: String (locks, sessions), Hash (user/product info, cart), List (order queues), Set (successful users),
ZSet (rankings)
- **Lua Scripts**: Atomic operations for flash sales, distributed locks, rate limiting, cart operations
- **Message Queues**: Pub/Sub for order status changes and inventory updates
## Common Development Commands
### Build and Run
```bash
# Compile project
mvn clean compile
# Run application
mvn spring-boot:run
# Package application
mvn clean package
```
### Testing
```bash
# Run all tests
mvn test
# Run specific test
mvn test -Dtest=FlashSaleServiceTest
mvn test -Dtest=RedisServiceTest
```
### Database Setup
```bash
# Create database
mysql -u root -p
CREATE DATABASE flash_sale_db;
# Import schema and test data
mysql -u root -p flash_sale_db < src/main/resources/sql/schema.sql
mysql -u root -p flash_sale_db < src/main/resources/sql/test-data.sql
```
## Application Configuration
### Key Configuration Files
- `application.yml`: Main application configuration including Redis cluster, database, and custom flash sale settings
- `pom.xml`: Maven dependencies and build configuration
- `src/main/resources/lua/`: Lua scripts for Redis atomic operations
### Important Configuration Sections
- **Redis Cluster**: Configured for 6-node cluster with authentication
- **Flash Sale Settings**: Rate limiting (10 requests/minute), max quantity per user (1), stock preload timing
- **Cache TTL**: User info (30min), product info (60min), flash sale data (10min)
- **Database**: HikariCP connection pool with optimized settings
## Development Guidelines
### Service Layer Patterns
- All Redis operations use Redisson for cluster support
- Critical operations (stock deduction, cart updates) use Lua scripts for atomicity
- Distributed locks prevent overselling using Redisson's RLock
- Rate limiting implemented via sliding window algorithm in Lua
### Key Services
- **FlashSaleService**: Core flash sale logic with distributed locking and Lua scripts
- **RedisService**: Generic Redis operations wrapper
- **DistributedLockService**: Distributed locking abstraction
- **RateLimitService**: API rate limiting using Redis
- **CartService**: Shopping cart operations with Redis Hash storage
### Testing Approach
- Unit tests exist for core services (FlashSaleServiceTest, RedisServiceTest)
- Integration tests should verify Redis cluster connectivity
- Load testing recommended for flash sale scenarios
## Lua Script Usage
The system includes 5 Lua scripts in `src/main/resources/lua/`:
- `flashsale.lua`: Atomic stock deduction with overselling prevention
- `distributed_lock.lua`: Distributed lock acquisition
- `unlock.lua`: Safe distributed lock release
- `rate_limit.lua`: Sliding window rate limiting
- `cart_operation.lua`: Atomic shopping cart operations
## API Documentation
- **Swagger UI**: http://localhost:8080/doc.html (Knife4j)
- **API Docs**: http://localhost:8080/v3/api-docs
## Monitoring and Health
- **Actuator Endpoints**: /actuator/health, /actuator/metrics, /actuator/prometheus
- **Log Files**: logs/flash-sale-system.log with detailed Redis and SQL logging
- **Debug Level**: Enabled for package com.org.flashsalesystem and Redis operations