For a real-time web chat app with authentication, user roles, and persistent data, here’s how Redis and PostgreSQL compare — and what I’d recommend: 🔧 Use Case Breakdown Your app has: Real-time chat (low-latency message delivery) Users and roles (persistent relational data) Authentication (secure, durable, auditable) Likely needs message history, analytics, etc. ⚖️ Redis vs PostgreSQL Feature Redis PostgreSQL Real-time performance ⚡ Very fast (in-memory) Fast, but slower than Redis for pub/sub Data persistence Optional (via RDB/AOF), not ideal for long-term ✅ Durable, transactional Data modeling Key-value / NoSQL, limited schema ✅ Full SQL, relationships, constraints Pub/Sub support ✅ Native pub/sub for real-time messaging ❌ Not built-in (would need triggers + external tools) Authentication, roles Manual implementation ✅ Built-in, role-based permissions Horizontal scaling Complex, needs Redis Cluster Easier with read replicas, sharding options Best used for Caching, queues, ephemeral messages Business logic, user data, history, analytics 🏆 Recommendation: Use Both For most production-grade real-time chat apps, the winning combo is: ✅ PostgreSQL for core data: Store users, roles, permissions Store chat rooms, messages (for history) Handle auth, tokens, metadata ACID compliance for data safety ✅ Redis for real-time layer: Use Redis Pub/Sub or Redis Streams to push messages instantly between clients Cache hot data (e.g., user presence, recent messages) Optionally use Redis for rate-limiting, session storage, etc. 🧱 Tech Stack Suggestion: PostgreSQL (via Prisma/TypeORM/Knex etc.) Redis (for pub/sub and presence) WebSockets or Socket.IO (for real-time messaging) JWT / OAuth2 (for authentication) Optional: Redis Streams if you want message persistence but not in the main DB ⚠️ Don't use Redis alone unless: You’re okay with ephemeral data You’re building a temporary or stateless chat (e.g. anonymous live chat) You don't need strong data consistency or rich querying