{"id":30754170,"url":"https://github.com/fkucukkara/redisplayground","last_synced_at":"2025-09-04T09:08:03.743Z","repository":{"id":312441108,"uuid":"1047513199","full_name":"fkucukkara/redisPlayground","owner":"fkucukkara","description":"A comprehensive .NET 9 demonstration of Redis operations using clean architecture with Microsoft Aspire.","archived":false,"fork":false,"pushed_at":"2025-08-30T17:07:18.000Z","size":59,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-30T17:40:04.612Z","etag":null,"topics":["api-rest","architecture","aspire","aspire-dotnet","claude-sonnet-4","copilot","dotnet-core","geo","hashes","json","lists","pub-sub","redis","streams"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fkucukkara.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-30T15:34:19.000Z","updated_at":"2025-08-30T17:09:42.000Z","dependencies_parsed_at":"2025-08-30T17:40:06.046Z","dependency_job_id":"10674b43-9cef-4866-a279-1f793b596df4","html_url":"https://github.com/fkucukkara/redisPlayground","commit_stats":null,"previous_names":["fkucukkara/redisplayground"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/fkucukkara/redisPlayground","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkucukkara%2FredisPlayground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkucukkara%2FredisPlayground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkucukkara%2FredisPlayground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkucukkara%2FredisPlayground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fkucukkara","download_url":"https://codeload.github.com/fkucukkara/redisPlayground/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fkucukkara%2FredisPlayground/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273581224,"owners_count":25131393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","architecture","aspire","aspire-dotnet","claude-sonnet-4","copilot","dotnet-core","geo","hashes","json","lists","pub-sub","redis","streams"],"created_at":"2025-09-04T09:06:44.196Z","updated_at":"2025-09-04T09:08:03.727Z","avatar_url":"https://github.com/fkucukkara.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🚀 Redis Playground\n\n### *A Modern .NET 9 Redis Operations Showcase*\n\n[![.NET](https://img.shields.io/badge/.NET-9.0-512BD4?style=for-the-badge\u0026logo=dotnet)](https://dotnet.microsoft.com/)\n[![Redis](https://img.shields.io/badge/Redis-DC382D?style=for-the-badge\u0026logo=redis\u0026logoColor=white)](https://redis.io/)\n[![Aspire](https://img.shields.io/badge/Aspire-512BD4?style=for-the-badge\u0026logo=microsoft)](https://learn.microsoft.com/en-us/dotnet/aspire/)\n[![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge\u0026logo=docker\u0026logoColor=white)](https://www.docker.com/)\n\n**Comprehensive Redis operations demonstration with clean architecture, Microsoft Aspire orchestration, and modern .NET patterns**\n\n---\n\n\u003c/div\u003e\n\n## 📋 Navigation\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🗂️ Table of Contents\u003c/strong\u003e\u003c/summary\u003e\n\n- [✨ Overview](#-overview)\n- [🏗️ Architecture](#️-architecture)  \n- [⚡ Quick Start](#-quick-start)\n- [📖 API Reference](#-api-reference)\n- [🧪 Testing](#-testing)\n- [⚙️ Configuration](#️-configuration)\n- [📚 Resources](#-resources)\n\n\u003c/details\u003e\n\n## ✨ Overview\n\n\u003e **Redis Playground** showcases **15 comprehensive Redis feature groups** through a clean, modular ASP.NET Core API built with modern .NET patterns and cloud-native principles.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n### 🏗️ **Technology Stack**\n\n| Component | Technology |\n|-----------|------------|\n| **Runtime** | `.NET 9` with Minimal APIs |\n| **Orchestration** | `Microsoft Aspire` |\n| **Redis Client** | `StackExchange.Redis` |\n| **Documentation** | `OpenAPI/Swagger` |\n| **Architecture** | `Clean Architecture` |\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n### 📦 **Feature Categories**\n\n| 🎯 **Category** | 📊 **Features** |\n|----------------|------------------|\n| **Core** | Cache, Strings, Collections |\n| **Real-time** | Pub/Sub, Streams |\n| **Spatial** | Geospatial Operations |\n| **Modern** | JSON, Analytics, ML |\n| **Tools** | Locks, Utilities, DevOps |\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### 🌟 **Project Architecture**\n\n```mermaid\ngraph TB\n    A[🎯 AppHost\u003cbr/\u003eAspire Orchestration] --\u003e B[🌐 ApiService\u003cbr/\u003eMain API]\n    A --\u003e C[📦 Redis Container\u003cbr/\u003eData Layer]\n    B --\u003e D[📂 15 Endpoint Modules]\n    B --\u003e E[🔧 Service Defaults]\n    D --\u003e F[📋 Models \u0026 DTOs]\n    D --\u003e G[🧪 HTTP Test Collections]\n    \n    style A fill:#e1f5fe\n    style B fill:#f3e5f5\n    style C fill:#ffebee\n    style D fill:#e8f5e8\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📁 Detailed Project Structure\u003c/strong\u003e\u003c/summary\u003e\n\n```\n🏗️ RedisPlayground/\n├── 🎯 RedisPlayground.AppHost/           # Aspire orchestration \u0026 service discovery\n├── 🌐 RedisPlayground.ApiService/        # Core API service\n│   ├── 📂 Endpoints/                     # 15 feature-specific modules\n│   │   ├── 01-BasicCacheEndpoints.cs     # IDistributedCache operations\n│   │   ├── 02-StringEndpoints.cs         # String \u0026 counter operations\n│   │   ├── 03-HashEndpoints.cs          # Hash/dictionary operations\n│   │   ├── 04-ListEndpoints.cs          # Queue \u0026 stack operations\n│   │   ├── 05-SetEndpoints.cs           # Set operations \u0026 membership\n│   │   ├── 06-SortedSetEndpoints.cs     # Leaderboards \u0026 rankings\n│   │   ├── 07-PubSubEndpoints.cs        # Real-time messaging\n│   │   ├── 08-StreamEndpoints.cs        # Event streaming\n│   │   ├── 09-GeospatialEndpoints.cs    # Location services\n│   │   ├── 11-JsonEndpoints.cs          # JSON document operations\n│   │   ├── 12-BitfieldEndpoints.cs      # Bit manipulation\n│   │   ├── 13-LockEndpoints.cs          # Distributed locking\n│   │   ├── 14-AnalyticsEndpoints.cs     # Bloom filters \u0026 analytics\n│   │   └── 15-DeveloperToolsEndpoints.cs # Dev utilities \u0026 diagnostics\n│   ├── 📋 Models/                        # Request/response DTOs\n│   ├── 🔧 Extensions/                    # Endpoint registration\n│   └── 🧪 HttpTests/                     # Comprehensive test collections\n├── ⚙️ RedisPlayground.ServiceDefaults/   # Shared configuration \u0026 middleware\n└── 📄 RedisPlayground.sln               # Solution file\n```\n\n\u003c/details\u003e\n\n## 🏗️ Architecture\n\n### 🎯 **Redis Feature Matrix**\n\n\u003cdiv align=\"center\"\u003e\n\n| 🔥 **Category** | 📊 **Features** | 💡 **Use Cases** | 🎨 **Examples** |\n|-----------------|------------------|-------------------|------------------|\n| **🔧 Basic** | Cache, Strings | Session storage, counters | User sessions, page views |\n| **📚 Collections** | Lists, Sets, Sorted Sets, Hashes | Queues, leaderboards, profiles | Gaming scores, social feeds |\n| **⚡ Advanced** | Pub/Sub, Streams, Geospatial | Real-time messaging, location | Chat apps, delivery tracking |\n| **🚀 Modern** | JSON, Bitfields, Analytics | Document storage, ML features | Content management, recommendations |\n| **🛠️ Tools** | Locks, Rate Limiting, DevOps | Distributed systems, monitoring | API protection, diagnostics |\n\n\u003c/div\u003e\n\n### 🌊 **Data Flow Architecture**\n\n```mermaid\nsequenceDiagram\n    participant C as 👤 Client\n    participant A as 🌐 API Service\n    participant R as 📦 Redis\n    participant M as 📊 Monitoring\n    \n    C-\u003e\u003eA: HTTP Request\n    A-\u003e\u003eR: Redis Operation\n    R--\u003e\u003eA: Data Response\n    A-\u003e\u003eM: Telemetry\n    A--\u003e\u003eC: JSON Response\n    \n    Note over A,R: Aspire handles\u003cbr/\u003eservice discovery\n    Note over M: OpenTelemetry\u003cbr/\u003eobservability\n```\n\n## ⚡ Quick Start\n\n### 📋 **Prerequisites**\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n#### ✅ **Required**\n- 🔧 `.NET 9 SDK` \n- 🐳 `Docker Desktop`\n- 💻 `Git` (for cloning)\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n#### 🌟 **Recommended**\n- 🎨 `VS Code` with REST Client\n- 🔍 `Redis CLI` tools\n- 📊 `Aspire Dashboard` browser\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n### 🚀 **Option 1: Aspire Orchestration** *(Recommended)*\n\n```bash\n# 🎯 One-command startup with full observability\ngit clone https://github.com/fkucukkara/RedisPlayground.git\ncd RedisPlayground\ndotnet run --project RedisPlayground.AppHost\n```\n\n\u003cdiv align=\"center\"\u003e\n\n#### 🌐 **Access Points**\n\n| � **Service** | 🌍 **URL** | 📝 **Description** |\n|----------------|------------|---------------------|\n| **🎛️ Aspire Dashboard** | http://localhost:15000 | Service orchestration \u0026 monitoring |\n| **📖 API Documentation** | *Check dashboard for URL* + `/swagger` | Interactive OpenAPI docs |\n| **🧪 HTTP Test Files** | VS Code → `HttpTests/*.http` | Ready-to-run API tests |\n\n\u003c/div\u003e\n\n---\n\n### ⚙️ **Option 2: Manual Setup** *(Development)*\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔧 Click to expand manual setup instructions\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# 🐳 Start Redis container\ndocker run -d -p 6379:6379 --name redis-playground redis:latest\n\n# 🌐 Run API service directly\ndotnet run --project RedisPlayground.ApiService\n```\n\n**📍 Manual Access:** API available at `http://localhost:5528`\n\n\u003c/details\u003e\n\n---\n\n### ✨ **Quick Validation**\n\nRun this quick test to verify everything is working:\n\n```bash\n# 🧪 Test basic cache operation\ncurl -X POST \"http://localhost:5528/cache/hello\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '\"World\"'\n\n# 🔍 Retrieve cached value  \ncurl \"http://localhost:5528/cache/hello\"\n```\n\n**Expected Response:** `\"World\"`\n\n## 📖 API Reference\n\n### 🔧 **Core Operations**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📦 Basic Cache \u0026 Strings\u003c/strong\u003e\u003c/summary\u003e\n\n```http\n# 🗄️ Distributed Cache (IDistributedCache)\nGET    /cache/{key}                    # Retrieve cached value\nPOST   /cache/{key}                    # Store with 5min TTL  \nDELETE /cache/{key}                    # Remove from cache\n\n# 🔤 String Operations \u0026 Counters\nGET    /strings/{key}                  # Get string value\nPOST   /strings/{key}                  # Set string value\nPOST   /strings/{key}/increment        # Atomic increment/decrement\nGET    /strings/{key}/length           # Get string length\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📚 Collections \u0026 Data Structures\u003c/strong\u003e\u003c/summary\u003e\n\n```http\n# 🗂️ Hash Operations (Key-Value maps)\nGET    /hashes/{key}                   # Get all hash fields\nPOST   /hashes/{key}/{field}           # Set hash field\nGET    /hashes/{key}/{field}           # Get specific field\n\n# 📝 List Operations (Queues \u0026 Stacks)  \nGET    /lists/{key}                    # Get list range\nPOST   /lists/{key}/push               # Push to list\nPOST   /lists/{key}/pop                # Pop from list\n\n# 🎯 Set Operations (Unique collections)\nGET    /sets/{key}                     # Get set members\nPOST   /sets/{key}/add                 # Add to set\nPOST   /sets/{key}/union               # Set union operation\n\n# 🏆 Sorted Set Operations (Leaderboards)\nGET    /sorted-sets/{key}/leaderboard  # Get rankings by score\nPOST   /sorted-sets/{key}/add          # Add scored member\nGET    /sorted-sets/{key}/rank/{member} # Get member rank\n```\n\n\u003c/details\u003e\n\n### 🚀 **Advanced Features**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e⚡ Real-time \u0026 Streaming\u003c/strong\u003e\u003c/summary\u003e\n\n```http\n# 📡 Pub/Sub Messaging\nPOST   /pubsub/publish/{channel}       # Publish message to channel\nGET    /pubsub/subscribe/{channel}     # Subscribe to channel (SSE)\nGET    /pubsub/channels                # List active channels\n\n# 🌊 Redis Streams (Event sourcing)\nPOST   /streams/{stream}/add           # Add entry to stream\nGET    /streams/{stream}/read          # Read stream entries\nPOST   /streams/{stream}/group/create  # Create consumer group\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🌍 Location \u0026 Spatial\u003c/strong\u003e\u003c/summary\u003e\n\n```http\n# 📍 Geospatial Operations\nPOST   /geo/{key}/add                  # Add location with coordinates\nGET    /geo/{key}/radius               # Find points within radius\nGET    /geo/{key}/distance             # Calculate distance between points\nGET    /geo/{key}/nearby               # Get nearby locations\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🚀 Modern Redis Stack\u003c/strong\u003e\u003c/summary\u003e\n\n```http\n# 📄 JSON Document Operations\nGET    /json/{key}                     # Get JSON document\nPOST   /json/{key}/set                 # Set JSON document\nPOST   /json/{key}/path                # JSONPath operations\nGET    /json/{key}/keys                # Get document keys\n\n# 🔬 Analytics \u0026 Probabilistic Data\nPOST   /analytics/bloom/{key}/add      # Bloom filter operations\nGET    /analytics/bloom/{key}/check    # Check bloom filter membership\nPOST   /analytics/hyperloglog/{key}/add # HyperLogLog cardinality\n```\n\n\u003c/details\u003e\n\n### 🛠️ **Developer Tools**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔧 Utilities \u0026 Diagnostics\u003c/strong\u003e\u003c/summary\u003e\n\n```http\n# 🎲 Sample Data Generation\nPOST   /devtools/sample-data/generate  # Create comprehensive test data\nPOST   /devtools/sample-data/users     # Generate user profiles\nPOST   /devtools/sample-data/leaderboard # Generate gaming leaderboard\n\n# 🗃️ Database Management\nDELETE /devtools/keys/pattern          # Bulk delete by pattern\nGET    /devtools/keys/info             # Database statistics \u0026 memory usage\nGET    /devtools/keys/scan             # Scan keys by pattern\nPOST   /devtools/backup               # Create data backup\n\n# 🔍 Direct Redis Access\nPOST   /devtools/command              # Execute raw Redis commands\nGET    /devtools/config               # Get Redis configuration\nPOST   /devtools/monitor              # Monitor Redis commands (real-time)\n```\n\n\u003c/details\u003e\n\n---\n\n### 📱 **Response Examples**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e💡 Click to see sample API responses\u003c/strong\u003e\u003c/summary\u003e\n\n```json\n// GET /sorted-sets/leaderboard/top\n{\n  \"success\": true,\n  \"data\": [\n    {\"member\": \"player1\", \"score\": 2500.0, \"rank\": 1},\n    {\"member\": \"player2\", \"score\": 2350.0, \"rank\": 2},\n    {\"member\": \"player3\", \"score\": 2100.0, \"rank\": 3}\n  ],\n  \"metadata\": {\n    \"totalMembers\": 150,\n    \"timestamp\": \"2025-08-30T10:30:00Z\"\n  }\n}\n\n// GET /geo/stores/nearby  \n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"name\": \"Store A\",\n      \"distance\": \"0.8 km\",\n      \"coordinates\": [40.7589, -73.9851]\n    }\n  ]\n}\n```\n\n\u003c/details\u003e\n\n## 🧪 Testing\n\n### 🎯 **Interactive Testing with HTTP Files**\n\n\u003cdiv align=\"center\"\u003e\n\n| 📝 **Step** | 🎯 **Action** | 💡 **Details** |\n|-------------|---------------|----------------|\n| **1** | Install **REST Client** extension | VS Code marketplace |\n| **2** | Open any `.http` file in `HttpTests/` | 15 comprehensive test collections |\n| **3** | Click **\"Send Request\"** | Above any HTTP request |\n| **4** | View responses | In adjacent panel |\n\n\u003c/div\u003e\n\n---\n\n### 🎲 **Sample Data Generation**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🏗️ Generate Comprehensive Test Data\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# 🎯 Generate complete dataset (all Redis types)\ncurl -X POST \"http://localhost:5528/devtools/sample-data/generate\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"keyPrefix\": \"demo\", \n    \"count\": 50,\n    \"includeUsers\": true,\n    \"includeLeaderboard\": true,\n    \"includeGeoData\": true\n  }'\n```\n\n**🎉 This creates:**\n- ✅ **Cache entries** - Session-like data\n- ✅ **String counters** - Page views, likes  \n- ✅ **Hash profiles** - User information\n- ✅ **List queues** - Message queues\n- ✅ **Set collections** - Tags, categories\n- ✅ **Sorted leaderboards** - Gaming scores\n- ✅ **Geospatial data** - Store locations\n- ✅ **JSON documents** - Product catalogs\n- ✅ **Stream events** - Activity logs\n\n\u003c/details\u003e\n\n---\n\n### 🧹 **Data Management**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🗑️ Cleanup \u0026 Reset Operations\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# 🧹 Clean up test data by pattern\ncurl -X DELETE \"http://localhost:5528/devtools/keys/pattern\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"pattern\": \"demo:*\"}'\n\n# 📊 Check database statistics\ncurl \"http://localhost:5528/devtools/keys/info\"\n\n# 🔍 Scan for specific patterns\ncurl \"http://localhost:5528/devtools/keys/scan?pattern=user:*\u0026count=10\"\n```\n\n\u003c/details\u003e\n\n---\n\n### 🎮 **Example Test Scenarios**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🏆 Gaming Leaderboard Test\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# 1️⃣ Add players to leaderboard\ncurl -X POST \"http://localhost:5528/sorted-sets/game-scores/add\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"member\": \"player1\", \"score\": 2500}'\n\n# 2️⃣ Get top 10 players  \ncurl \"http://localhost:5528/sorted-sets/game-scores/leaderboard?count=10\"\n\n# 3️⃣ Get player rank\ncurl \"http://localhost:5528/sorted-sets/game-scores/rank/player1\"\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📍 Location Services Test\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# 1️⃣ Add store locations\ncurl -X POST \"http://localhost:5528/geo/stores/add\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"member\": \"store1\", \n    \"longitude\": -73.9851, \n    \"latitude\": 40.7589\n  }'\n\n# 2️⃣ Find nearby stores (within 5km)\ncurl \"http://localhost:5528/geo/stores/radius?longitude=-73.9800\u0026latitude=40.7500\u0026radius=5\u0026unit=km\"\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e💬 Real-time Messaging Test\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# 1️⃣ Publish message to channel\ncurl -X POST \"http://localhost:5528/pubsub/publish/chat-room\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"message\": \"Hello, Redis!\", \"user\": \"demo-user\"}'\n\n# 2️⃣ Subscribe to channel (Server-Sent Events)\ncurl \"http://localhost:5528/pubsub/subscribe/chat-room\"\n```\n\n\u003c/details\u003e\n\n## ⚙️ Configuration\n\n### 🎯 **Aspire Integration** *(Recommended)*\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔧 Automatic Service Discovery \u0026 Orchestration\u003c/strong\u003e\u003c/summary\u003e\n\n```csharp\n// AppHost.cs - Zero-configuration Redis setup\nvar builder = DistributedApplication.CreateBuilder(args);\n\n// 🐳 Automatic Redis container provisioning\nvar redis = builder.AddRedis(\"cache\")\n    .WithRedisCommander(); // Optional: Redis GUI\n\n// 🌐 API service with automatic Redis connection\nvar apiService = builder.AddProject\u003cProjects.RedisPlayground_ApiService\u003e(\"apiservice\")\n    .WithReference(redis)         // Service discovery\n    .WithReplicas(2);            // Load balancing\n\n// 🎛️ Aspire dashboard with full observability\nbuilder.Build().Run();\n```\n\n**✨ Benefits:**\n- 🔄 Automatic service discovery\n- 📊 Built-in observability \u0026 metrics  \n- 🐳 Container lifecycle management\n- 🔧 Configuration management\n- 🚀 Zero manual setup required\n\n\u003c/details\u003e\n\n---\n\n### ⚙️ **Manual Configuration** *(Development)*\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔧 Traditional Connection Setup\u003c/strong\u003e\u003c/summary\u003e\n\n#### **📁 appsettings.json**\n```json\n{\n  \"ConnectionStrings\": {\n    \"cache\": \"localhost:6379\"\n  },\n  \"Redis\": {\n    \"Configuration\": {\n      \"AbortOnConnectFail\": false,\n      \"ConnectTimeout\": 5000,\n      \"SyncTimeout\": 5000,\n      \"AsyncTimeout\": 5000,\n      \"ConnectRetry\": 3,\n      \"KeepAlive\": 180\n    }\n  },\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"StackExchange.Redis\": \"Warning\"\n    }\n  }\n}\n```\n\n#### **🔧 Program.cs Service Registration**\n```csharp\n// Manual Redis registration (without Aspire)\nbuilder.Services.AddStackExchangeRedisCache(options =\u003e\n{\n    options.Configuration = builder.Configuration.GetConnectionString(\"cache\");\n    options.InstanceName = \"RedisPlayground\";\n});\n\n// Direct StackExchange.Redis registration\nbuilder.Services.AddSingleton\u003cIConnectionMultiplexer\u003e(provider =\u003e\n{\n    var connectionString = builder.Configuration.GetConnectionString(\"cache\");\n    return ConnectionMultiplexer.Connect(connectionString);\n});\n```\n\n\u003c/details\u003e\n\n---\n\n### 🐳 **Docker Compose Setup** *(Alternative)*\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🏗️ Container Orchestration without Aspire\u003c/strong\u003e\u003c/summary\u003e\n\n```yaml\n# docker-compose.yml\nversion: '3.8'\n\nservices:\n  redis:\n    image: redis:7-alpine\n    ports:\n      - \"6379:6379\"\n    command: redis-server --appendonly yes\n    volumes:\n      - redis-data:/data\n    healthcheck:\n      test: [\"CMD\", \"redis-cli\", \"ping\"]\n      interval: 10s\n      timeout: 3s\n      retries: 3\n\n  redis-commander:\n    image: rediscommander/redis-commander:latest\n    ports:\n      - \"8081:8081\"\n    environment:\n      - REDIS_HOSTS=local:redis:6379\n    depends_on:\n      - redis\n\n  api:\n    build: .\n    ports:\n      - \"5528:8080\"\n    environment:\n      - ConnectionStrings__cache=redis:6379\n    depends_on:\n      - redis\n\nvolumes:\n  redis-data:\n```\n\n**🚀 Start with:** `docker-compose up -d`\n\n\u003c/details\u003e\n\n---\n\n### 🌍 **Environment Variables**\n\n| 🔧 **Variable** | 📝 **Description** | 🎯 **Default** |\n|-----------------|--------------------|-----------------| \n| `ConnectionStrings__cache` | Redis connection string | `localhost:6379` |\n| `ASPNETCORE_ENVIRONMENT` | Runtime environment | `Development` |\n| `Redis__InstanceName` | Redis instance identifier | `RedisPlayground` |\n| `OTEL_EXPORTER_OTLP_ENDPOINT` | OpenTelemetry endpoint | *(disabled)* |\n\n## 📚 Resources\n\n### � **Official Documentation**\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n#### 📖 **Redis Resources**\n- 🎯 **[Redis Data Types Overview](https://redis.io/docs/latest/develop/data-types/)**  \n  *Complete guide to all Redis data structures*\n  - **Basic Types**: Strings, Lists, Sets, Hashes, Sorted Sets\n  - **Advanced Types**: Streams, Geospatial, Bitmaps, Bitfields  \n  - **Modern Features**: JSON documents, Vector sets (AI/ML)\n  - **Probabilistic**: HyperLogLog, Bloom filters, t-digest, Count-min sketch\n  - **Time Series**: Specialized timestamped data structures\n\n- 🚀 **[Redis Commands Reference](https://redis.io/commands/)**  \n  *Comprehensive command documentation*\n\n- 🎓 **[Redis University](https://university.redis.com/)**  \n  *Free courses and certifications*\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n#### 🏗️ **.NET Aspire Resources**\n- 🌟 **[.NET Aspire Integrations Overview](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/integrations-overview)**  \n  *Cloud-native development platform*\n  - **Hosting Integrations**: Container \u0026 cloud resource provisioning\n  - **Client Integrations**: DI, health checks, telemetry automation\n  - **Redis Packages**:\n    - `Aspire.StackExchange.Redis` - Core operations\n    - `Aspire.StackExchange.Redis.DistributedCaching` - IDistributedCache\n    - `Aspire.StackExchange.Redis.OutputCaching` - Response caching\n  - **Service Defaults**: Observability, health, resiliency patterns\n\n- 🎯 **[Aspire Dashboard](https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/dashboard/overview)**  \n  *Observability \u0026 monitoring*\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n### 🛠️ **Developer Tools \u0026 Extensions**\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🎨 Recommended VS Code Extensions\u003c/strong\u003e\u003c/summary\u003e\n\n| 🔧 **Extension** | 📝 **Purpose** | 🎯 **Usage** |\n|------------------|----------------|---------------|\n| **REST Client** | HTTP testing | Test `.http` files directly in VS Code |\n| **C# Dev Kit** | .NET development | IntelliSense, debugging, project management |\n| **Docker** | Container management | Manage Redis containers |\n| **Thunder Client** | API testing | Alternative to Postman |\n| **GitLens** | Git integration | Enhanced git capabilities |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔍 Redis GUI Tools\u003c/strong\u003e\u003c/summary\u003e\n\n| 🎨 **Tool** | 🌟 **Features** | 💰 **Cost** |\n|-------------|------------------|--------------|\n| **Redis Commander** | Web-based, simple interface | Free |\n| **RedisInsight** | Official Redis GUI, advanced features | Free |\n| **Medis** | macOS native app | Free |\n| **Redis Desktop Manager** | Cross-platform, feature-rich | Paid |\n\n\u003c/details\u003e\n\n---\n\n### 🎓 **Learning Path**\n\n\u003cdiv align=\"center\"\u003e\n\n```mermaid\nflowchart TD\n    A[🎯 Start Here] --\u003e B[📚 Redis Basics]\n    B --\u003e C[🔧 .NET Integration]\n    C --\u003e D[🏗️ Aspire Setup]\n    D --\u003e E[🧪 Test with Playground]\n    E --\u003e F[🚀 Build Your App]\n    \n    B --\u003e B1[Strings \u0026 Cache]\n    B --\u003e B2[Lists \u0026 Sets]\n    B --\u003e B3[Hashes \u0026 Sorted Sets]\n    \n    C --\u003e C1[StackExchange.Redis]\n    C --\u003e C2[IDistributedCache]\n    C --\u003e C3[Dependency Injection]\n    \n    D --\u003e D1[Service Discovery]\n    D --\u003e D2[Container Orchestration]\n    D --\u003e D3[Observability]\n    \n    style A fill:#e1f5fe\n    style F fill:#e8f5e8\n```\n\n\u003c/div\u003e\n\n---\n\n### 🤝 **Community \u0026 Support**\n\n\u003cdiv align=\"center\"\u003e\n\n| 🌐 **Platform** | 🎯 **Purpose** | 🔗 **Link** |\n|------------------|----------------|-------------|\n| **GitHub Issues** | Bug reports, feature requests | [Create Issue](https://github.com/fkucukkara/RedisPlayground/issues) |\n| **Discussions** | Questions, ideas, showcases | [Join Discussion](https://github.com/fkucukkara/RedisPlayground/discussions) |\n| **Redis Community** | Redis-specific help | [Redis Discord](https://discord.gg/redis) |\n| **.NET Community** | .NET \u0026 Aspire support | [.NET Discord](https://discord.gg/dotnet) |\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n### 🌟 **Star this repo if it helped you!**\n\n[![GitHub stars](https://img.shields.io/github/stars/fkucukkara/RedisPlayground?style=social)](https://github.com/fkucukkara/RedisPlayground/stargazers)\n[![GitHub forks](https://img.shields.io/github/forks/fkucukkara/RedisPlayground?style=social)](https://github.com/fkucukkara/RedisPlayground/network)\n\n**Made with ❤️ for the .NET \u0026 Redis communities**\n\n---\n\n*📝 Want to contribute? Check our [Contributing Guidelines](CONTRIBUTING.md) | 📄 [MIT License](LICENSE)*\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffkucukkara%2Fredisplayground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffkucukkara%2Fredisplayground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffkucukkara%2Fredisplayground/lists"}