---
title: "Gowtham Muthuvel (@GowthamMuthuvel) | Hashnode"
description: "Full-stack developer | Java, Spring Boot, React | Senior Backend Developer. Read the latest articles by Gowtham Muthuvel on Hashnode."
url: "https://hashnode.com/@GowthamMuthuvel"
---

@GowthamMuthuvel

# Gowtham Muthuvel

@GowthamMuthuvel · Joined December 2023

Full-stack developer | Java, Spring Boot, React | Senior Backend Developer

### [Redis Cache-Aside in Spring Boot: Measured Latency and Stampede Fixes](https://gowthammuthuvel.hashnode.dev/spring-boot-redis-cache-aside-stampede?utm_source=hashnode&utm_medium=feed)

A cache hit took 2.24 ms vs 53.54 ms, yet 100 concurrent misses made 100 DB reads, even with @Cacheable(sync = true). Single flight and a Redis lock fixed it, measured on real Redis.

32 min read · [gowthammuthuvel.hashnode.dev](https://gowthammuthuvel.hashnode.dev/spring-boot-redis-cache-aside-stampede?utm_source=hashnode&utm_medium=feed)

[1d ago](https://hashnode.com/posts/spring-boot-redis-cache-aside-stampede/6af6dc6dcc982b315031a222)

### [JWT + Role-Based Access in Spring Security: Refresh Tokens Without the Footguns](https://gowthammuthuvel.hashnode.dev/spring-security-jwt-refresh-token-rotation-rbac?utm_source=hashnode&utm_medium=feed)

Rotation with reuse detection, ROLE\_ vs SCOPE\_ mapping, and the permitAll() trap, all tested on Spring Boot 4.1.2. Replaying an old refresh token revoked 2 tokens and killed the session.

20 min read · [gowthammuthuvel.hashnode.dev](https://gowthammuthuvel.hashnode.dev/spring-security-jwt-refresh-token-rotation-rbac?utm_source=hashnode&utm_medium=feed)

[4d ago](https://hashnode.com/posts/spring-security-jwt-refresh-token-rotation-rbac/6af29fea91696569429d27db)

### [FastAPI \`def\` vs \`async def\`: When Your Endpoint Blocks Everything](https://gowthammuthuvel.hashnode.dev/fastapi-def-vs-async-def-blocking-event-loop?utm_source=hashnode&utm_medium=feed)

Ten concurrent 0.5 s sleeps: async def + time.sleep took 5016.7 ms and made /ping sit at p50 450.7 ms. Plain def and await asyncio.sleep both finished around 0.5 s with /ping under 2 ms.

12 min read · [gowthammuthuvel.hashnode.dev](https://gowthammuthuvel.hashnode.dev/fastapi-def-vs-async-def-blocking-event-loop?utm_source=hashnode&utm_medium=feed)

[Nov 6](https://hashnode.com/posts/fastapi-def-vs-async-def-blocking-event-loop/6aed7dd4310621c7358a6ed9)

### [Retrying fetch in Node.js the Right Way: Backoff, Retry-After, Deadlines](https://gowthammuthuvel.hashnode.dev/node-fetch-retry-backoff-retry-after-deadline?utm_source=hashnode&utm_medium=feed)

Tested against a deliberately flaky local server: err.cause codes, HTTP-date Retry-After, AbortSignal.any deadlines and a 200-client outage

27 min read · [gowthammuthuvel.hashnode.dev](https://gowthammuthuvel.hashnode.dev/node-fetch-retry-backoff-retry-after-deadline?utm_source=hashnode&utm_medium=feed)

[1](https://hashnode.com/posts/node-fetch-retry-backoff-retry-after-deadline/6ae8b4230385dd08ea5bfc12) [Nov 2](https://hashnode.com/posts/node-fetch-retry-backoff-retry-after-deadline/6ae8b4230385dd08ea5bfc12)

### [Idempotency Keys in Spring Boot: Making POST Safe to Retry](https://gowthammuthuvel.hashnode.dev/idempotency-keys-spring-boot?utm_source=hashnode&utm_medium=feed)

20 identical POSTs, 1 order: a tested Spring Boot idempotency filter with the key row in the same transaction, and the race it fixes.

18 min read · [gowthammuthuvel.hashnode.dev](https://gowthammuthuvel.hashnode.dev/idempotency-keys-spring-boot?utm_source=hashnode&utm_medium=feed)

[Oct 30](https://hashnode.com/posts/idempotency-keys-spring-boot/6ae420ed6824982ae9ea2ecb)
