#1
In scalable web applications, users may connect to different server instances through a load balancer. If sessions are stored locally in each server, users might lose their session when requests are routed to another instance.
Redis solves this problem by storing sessions centrally, allowing all application instances to access the same session data.
This article explains how to implement distributed session management using Redis in Spring Boot.

1. Why Use Redis for Session Management

Traditional session storage works like this:
User → Server A → Session stored in Server A memory
If the next request goes to Server B, the session is lost.
With Redis:
User → Load Balancer → Spring Boot Instances
                           ↓
                         Redis
All instances share the same session storage.
Benefits:
  • Horizontal scaling
  • Session persistence
  • High availability
  • Stateless application servers

2. Adding Spring Session Redis

Spring provides Spring Session to manage distributed sessions easily.
Maven dependency:
<dependency>
 <groupId>org.springframework.session</groupId>
 <artifactId>spring-session-data-redis</artifactId>
</dependency>
This library automatically stores sessions in Redis.

3. Redis Configuration

Configure Redis in application.properties.
spring.redis.host=localhost
spring.redis.port=6379
spring.session.store-type=redis
Spring Boot will automatically use Redis to store HTTP sessions.

4. Enabling Redis Session Management

Enable Redis-based session storage:
@Configuration
@EnableRedisHttpSession
public class SessionConfig {
}
Now every user session will be stored in Redis.

5. Accessing Session Data

You can access session data in controllers like a normal HTTP session.
Example:
@RestController
@RequestMapping("/session")
public class SessionController {

    @GetMapping("/set")
    public String setSession(HttpSession session) {
        session.setAttribute("user", "John");
        return "Session stored";
    }

    @GetMapping("/get")
    public String getSession(HttpSession session) {
        return (String) session.getAttribute("user");
    }
}
Even if the request hits another server instance, Redis provides the session.

6. Session Expiration

Redis automatically handles session expiration using TTL.
Example configuration:
server.servlet.session.timeout=30m
Sessions expire after 30 minutes of inactivity.
Redis automatically deletes expired sessions.

7. Viewing Sessions in Redis

Sessions are stored in Redis keys like:
spring:session:sessions:<session-id>
You can inspect them using Redis CLI:
redis-cli keys spring:session*
This helps during debugging and monitoring.

8. Scaling Session Storage

For high traffic systems, Redis can run in cluster mode:
Redis Cluster
 ├── Node 1
 ├── Node 2
 └── Node 3
Benefits:
  • High availability
  • Automatic failover
  • Horizontal scalability
This makes session storage reliable even in large systems.
#ads

image quote pre code