Session supports multiple storage backends, each optimized for different use cases.
graph TD
subgraph "Choose Your Backend"
Q1{"Single server?"}
Q2{"Need persistence?"}
Q3{"Multi-node?"}
Q4{"Need caching?"}
Q1 -->|"Yes"| Q2
Q1 -->|"No"| Q3
Q2 -->|"No"| Memory["Memory Store"]
Q2 -->|"Yes"| Cookie["Cookie Store"]
Q3 -->|"Yes"| Q4
Q4 -->|"Yes"| Clustered["Clustered Redis"]
Q4 -->|"No"| Redis["Redis Store"]
end
| Feature | Cookie | Memory | Redis | Clustered Redis |
|---|---|---|---|---|
| Persistence | Client-side | None | Redis | Redis |
| Multi-node | Yes | No | Yes | Yes |
| Local Cache | N/A | N/A | No | Yes |
| Pub/Sub Sync | N/A | N/A | No | Yes |
| Max Size | 4KB | Memory | Unlimited | Unlimited |
| Best For | Simple apps | Development | Production | High-scale |
Session.use_store(Session::CookieStore(UserSession))
# then inside Session.configure:
config.store = Session::CookieStore(UserSession).newUse when:
- Stateless deployment (serverless, edge)
- Session data is small (< 4KB)
- No server-side storage needed
Session.use_store(Session::MemoryStore(UserSession))
# then inside Session.configure:
config.store = Session::MemoryStore(UserSession).newUse when:
- Development and testing
- Single-server deployment
- Sessions can be lost on restart
Session.use_store(Session::RedisStore(UserSession))
# then inside Session.configure:
config.store = Session::RedisStore(UserSession).new(client: Redis.new)Use when:
- Production deployment
- Multiple servers sharing sessions
- Session persistence required
Session.use_store(Session::ClusteredRedisStore(UserSession))
# then inside Session.configure:
config.cluster.enabled = true
config.store = Session::ClusteredRedisStore(UserSession).new(client: Redis.new)Use when:
- High-traffic production deployment
- Multiple servers with local caching
- Reduced Redis load important
- Real-time session invalidation needed
xychart-beta
title "Read Latency by Backend"
x-axis ["Cookie", "Memory", "Redis", "Clustered (hit)", "Clustered (miss)"]
y-axis "Latency (ms)" 0 --> 10
bar [0.1, 0.01, 2, 0.01, 3]
| Operation | Cookie | Memory | Redis | Clustered (hit) | Clustered (miss) |
|---|---|---|---|---|---|
| Read | ~0.1ms | ~0.01ms | ~1-5ms | ~0.01ms | ~1-5ms |
| Write | ~0.1ms | ~0.01ms | ~1-5ms | ~1-5ms | ~1-5ms |
| Delete | N/A | ~0.01ms | ~1-5ms | ~1-5ms + pub | ~1-5ms + pub |