Presence and Online Status Tracking
Build a real-time presence system that tracks which users are online using Redis sets, TTLs, and Pub/Sub heartbeats.
Presence and Online Status Tracking is a free Redis Caching & Messaging (Pub/Sub, Streams) lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Redis Caching & Messaging (Pub/Sub, Streams) learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
What Is Presence?
Presence is the real-time indication of whether a user is online, away, or offline. Chat apps, collaborative editors, and games all rely on it. Redis is ideal because presence data is ephemeral and high-churn.
The Naive Approach
A first idea: store a flag per user. The problem is detecting when someone disconnects ungracefully (closed laptop, lost network). A stale flag would mark them online forever.
SET presence:user:42 onlineHeartbeats with TTL
The robust pattern uses heartbeats. The client refreshes a key with a short TTL every few seconds. If heartbeats stop, the key expires and the user is considered offline.
SET presence:user:42 1 EX 15
# client re-issues this every 10 secondsListing Online Users
To list everyone online, keep a set of active users and check membership, or scan presence keys. A sorted set keyed by last-seen timestamp is efficient.
ZADD online 1716900000 user:42
ZADD online 1716900005 user:7Sorted Set by Timestamp
Storing last-seen as the score lets you both list members and prune the stale ones in one query.
ZADD online <now> user:idon each heartbeatZREMRANGEBYSCORE online -inf <cutoff>removes timed-out users
ZADD online 1716900010 user:42
ZREMRANGEBYSCORE online -inf 1716899980Broadcasting Status Changes
When a user comes online or drops off, publish an event so other clients update their UI immediately.
PUBLISH presence.events "user:42 online"
SUBSCRIBE presence.eventsDetecting Going Offline
Combine the sorted set prune with keyspace expiry. When a presence key expires, a keyevent fires, and a worker publishes a went-offline event to subscribers.
CONFIG SET notify-keyspace-events Ex
SUBSCRIBE __keyevent@0__:expiredPer-Room Presence
In a chat app you often need presence per room. Use one set per room and add or remove the user as they join or leave.
SADD room:general:online user:42
SREM room:general:online user:42
SMEMBERS room:general:onlineMulti-Device Presence
A user may be online from several devices. Count active connections so the user only goes offline when the last device disconnects.
INCR conns:user:42
DECR conns:user:42
GET conns:user:42Putting It Together
A complete presence system: heartbeat TTL keys, a last-seen sorted set, connection counters for multi-device, and Pub/Sub events to push changes to clients in real time.
Tuning the Intervals
Choose a heartbeat interval shorter than the TTL (for example heartbeat every 10s, TTL 15s) so a single missed beat does not flap a user offline. Shorter intervals mean faster detection but more traffic.
Quick Check
Test your understanding of presence design.
Recap
You built a real-time presence system using heartbeat TTL keys, a last-seen sorted set with score-based pruning, per-room presence sets, multi-device connection counters, and Pub/Sub broadcasts for instant status updates. Tune heartbeat and TTL intervals to balance detection speed against traffic.
Frequently asked questions
Is the “Presence and Online Status Tracking” lesson free?
Yes — the full text of “Presence and Online Status Tracking” is free to read here on the web, and the Redis Caching & Messaging (Pub/Sub, Streams) course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Redis Caching & Messaging (Pub/Sub, Streams) course, upgrade to CoddyKit PRO.
What will I learn in “Presence and Online Status Tracking”?
Build a real-time presence system that tracks which users are online using Redis sets, TTLs, and Pub/Sub heartbeats. You practise Redis Caching & Messaging (Pub/Sub, Streams) with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Redis Caching & Messaging (Pub/Sub, Streams)?
No prior experience is required. Redis Caching & Messaging (Pub/Sub, Streams) on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Presence and Online Status Tracking” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Redis Caching & Messaging (Pub/Sub, Streams) lesson?
Yes. Every Redis Caching & Messaging (Pub/Sub, Streams) lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Pattern Matching Subscriptions
- Designing Real-time Chat
- Event-Driven Architecture
- Presence and Online Status Tracking