Forum de discussion full-stack alimenté entièrement par Redis comme base de données unique. Aucun SQL — toutes les données (utilisateurs, catégories, threads, messages, sessions) sont persistées via les structures natives Redis (Hash, Set, List, Sorted Set, Pub/Sub).
- Authentification — Inscription, connexion, sessions JWT stockées en Redis avec TTL
- Catégories — Création, abonnement/désabonnement, liste des followers
- Threads — Création, classement par popularité et récence, compteur de vues
- Messages — Fil chronologique par thread, likes uniques par utilisateur
- Temps réel — Notifications SSE via Redis Pub/Sub, présence en ligne
- Exploration Redis — RedisInsight inclus pour visualiser les données
┌─────────────┐ REST API ┌─────────────┐ ioredis ┌─────────────┐
│ React │ ◄──────────────► │ Express │ ◄──────────────► │ Redis │
│ (Vite) │ SSE stream │ Node.js │ Hash/Set/List │ (Docker) │
└─────────────┘ └─────────────┘ ZSet/PubSub └─────────────┘
| Couche | Technologie |
|---|---|
| Frontend | React 18, React Router, Vite |
| Backend | Node.js, Express, ioredis |
| Base de données | Redis 7 (Hash, Set, List, Sorted Set, Pub/Sub) |
| Auth | bcrypt + sessions Redis (SETEX / TTL) |
| Infra | Docker Compose (Redis + RedisInsight) |
# 1. Cloner le dépôt
git clone https://github.com/anassrh/Redis-forum.git
cd Redis-forum
# 2. Lancer Redis et RedisInsight
docker-compose up -d
# 3. Backend
cd backend
npm install
cp .env.example .env # Windows : copy .env.example .env
npm run seed # Données de démonstration
npm run dev
# 4. Frontend (nouveau terminal)
cd frontend
npm install
npm run dev| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| API Backend | http://localhost:3001 |
| RedisInsight | http://localhost:8001 |
Copier backend/.env.example vers backend/.env :
PORT=3001
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
JWT_SECRET=your_secret_here| Donnée | Structure | Clé Redis |
|---|---|---|
| Profil utilisateur | Hash | user:{userId} |
| Index email | String | user:email:{email} |
| Session | String + TTL | session:{token} |
| Catégorie | Hash | category:{categoryId} |
| Index catégories | Set | categories |
| Catégories suivies | Set | user:{userId}:followedCategories |
| Followers catégorie | Set | category:{categoryId}:followers |
| Thread | Hash | thread:{threadId} |
| Threads par catégorie | List | category:{categoryId}:threads |
| Threads récents | Sorted Set | threads:recent |
| Threads populaires | Sorted Set | threads:popular |
| Message | Hash | message:{messageId} |
| Messages par thread | List | thread:{threadId}:messages |
| Likes message | Set | message:{messageId}:likes |
| Utilisateurs en ligne | Sorted Set | users:online |
| Notifications | Pub/Sub | category:{categoryId}:notifications |
| Méthode | Endpoint | Description |
|---|---|---|
POST |
/api/auth/register |
Inscription |
POST |
/api/auth/login |
Connexion |
POST |
/api/auth/logout |
Déconnexion |
GET |
/api/auth/me |
Profil courant |
GET |
/api/categories |
Liste des catégories |
POST |
/api/categories |
Créer une catégorie |
POST |
/api/categories/:id/follow |
Suivre une catégorie |
GET |
/api/threads/recent |
Top 20 threads récents |
GET |
/api/threads/popular |
Top 10 threads populaires |
POST |
/api/threads |
Créer un thread |
GET |
/api/threads/:id |
Détail thread (+ vues) |
GET |
/api/threads/:threadId/messages |
Messages d'un thread |
POST |
/api/threads/:threadId/messages |
Poster un message |
POST |
/api/messages/:id/like |
Liker un message |
GET |
/api/users/online |
Utilisateurs en ligne |
GET |
/api/notifications/stream |
Flux SSE notifications |
Toutes les routes protégées requièrent le header Authorization: Bearer <token>.
redis-forum/
├── backend/
│ ├── src/
│ │ ├── config/ # Connexion Redis
│ │ ├── controllers/ # Handlers HTTP
│ │ ├── middleware/ # Auth JWT / session
│ │ ├── routes/ # Routes Express
│ │ ├── services/ # Logique métier + Redis
│ │ └── scripts/ # Seed de données
│ └── .env.example
├── frontend/
│ └── src/
│ ├── api/ # Client HTTP
│ ├── components/ # Composants React
│ ├── context/ # Auth context
│ └── pages/ # Pages de l'application
├── docs/ # Documentation Redis détaillée
└── docker-compose.yml
Des guides détaillés sur le mapping Redis sont disponibles dans le dossier docs/ :
redis_mapping.md— Mapping métier ↔ structures Redisredis_commands_by_business.md— Commandes par cas d'usageredis_business_code_map.md— Correspondance code ↔ Redis
| Commande | Répertoire | Description |
|---|---|---|
npm run dev |
backend/ |
Serveur API avec hot-reload |
npm run seed |
backend/ |
Peupler Redis avec des données de test |
npm run dev |
frontend/ |
Serveur de développement Vite |
npm run build |
frontend/ |
Build de production |
Projet open source — libre d'utilisation et de modification.