Series Posts

Conceptual Kotlin for Java Survivors: Life After Semicolons

Part 0: Kotlin for Java Survivors: Life After Semicolons

A 16-part series for senior Java and Spring developers learning Kotlin 2.4. Follow Kabir, a 14-year Java veteran, from culture shock to shipping two Spring Boot 4.1 services with Kafka, Qdrant, Spring AI and LangChain4j.

Conceptual Redis Deep Dive: From Cache to AI Memory

Part 0: Redis Deep Dive: From Cache to AI Memory

An extensive 8-part Redis tutorial series written for senior engineers. It follows the story of Maya, a Staff Engineer at GlobalMart, who transforms a struggling monolith into a distributed, AI-powered platform using Redis.

Conceptual Redis Deep Dive: From Cache to AI Memory

Part 1: "The Database Meltdown" — The In-Memory Revolution

Maya faces her first Black Friday at GlobalMart. The relational database is collapsing under read-heavy traffic. We explore the physics of disk I/O versus RAM, the single-threaded event loop architecture of Redis, and implement the Cache-Aside pattern in Spring Boot.

Conceptual The Azure Ascent: A Backend Engineer's Journey to Cloud Mastery

Part 2: Building the Engine — Azure Compute Services

CloudVault needs to deploy its microservices. Marcus explores four compute options—Virtual Machines, App Service, Azure Functions, and Containers. We build a production-ready Java Spring Boot API and learn when to use each service for different workloads.

Conceptual Redis Deep Dive: From Cache to AI Memory

Part 2: "Beyond Strings" — The Anatomy of Data Structures

GlobalMart needs a real-time leaderboard. We move beyond simple key-value caching to explore the internal implementations of Redis data structures: Strings (SDS), Hashes (ZipList), Sets, and Sorted Sets (Skip Lists). We build a high-performance leaderboard using Spring Data Redis.

Conceptual Redis Deep Dive: From Cache to AI Memory

Part 4: "The Memory Limit" — Eviction Policies and Approximated LRU

GlobalMart hits physical RAM limits, causing OOM crashes. We explore memory management, the maxmemory directive, and how Redis uses an ingenious probabilistic approximated LRU algorithm to evict keys without the overhead of a true linked list.

Conceptual Redis Deep Dive: From Cache to AI Memory

Part 7: "Semantic Discovery" — Vector Embeddings and HNSW Graphs

Keyword search is failing. We introduce Redis Stack and RediSearch to build a "Find Similar Products" feature. We dive deep into vector embeddings, distance metrics (L2, Cosine), and how the Hierarchical Navigable Small World (HNSW) algorithm achieves logarithmic search times.

Conceptual Redis Deep Dive: From Cache to AI Memory

Part 8: "The Intelligent Agent" — Production RAG Architectures

Maya builds an AI shopping assistant. We move from naive retrieval to a production-grade Retrieval-Augmented Generation (RAG) system. We cover chunking strategies, hybrid search (combining vectors with metadata filters), and using Redis as conversational memory for LLMs.

Project Kotlin for Java Survivors: Life After Semicolons

Part 13: "The Catalog" — Spring Boot 4.1, JPA and REST in Kotlin

Kabir's first entity is a data class, and his first integration test dies with a StackOverflowError. We build product-catalog-service on Spring Boot 4.1 and Kotlin 2.4.20: entities that are not data classes, Spring Data with nullable returns, validation and Jackson 3 at the REST boundary, ProblemDetail errors, transactions that roll back on checked exceptions, the Gradle build, Testcontainers 2 and virtual threads.

Project Kotlin for Java Survivors: Life After Semicolons

Part 14: "Reactive and Events" — Coroutines, Streaming and Kafka

The AI team needs every product change, and Lena asks who owns the event schema. We publish a sealed, kotlinx.serialization event hierarchy to Kafka after commit and stream it as server-sent events from a Flow. We fan out to suppliers with suspend controllers and a suspending @HttpExchange client, and keep the request id in the logs as coroutines hop threads, all on Spring MVC with virtual threads.