rembrembdocs

Rolling sensor graph demo with Redis and Ruby

Build a Redis-backed rolling sensor graph demo in Ruby with redis-rb

This guide shows you how to build a compact rolling sensor graph demo in Ruby with redis-rb and Redis time series support. The example simulates three power sensors, ingests readings into Redis, and serves a local browser dashboard that updates in real time.

Overview

Time series are a natural fit for telemetry, monitoring, and IoT-style workloads. In this example, Redis stores a stream of timestamped readings from three simulated power sensors.

The demo is designed to make a few ideas easy to see:

How it works

The example has three main parts:

  1. A SensorSimulator generates realistic-looking power readings with drift and occasional spikes
  2. A RedisTimeSeriesStore creates the time series keys and issues Redis TimeSeries queries
  3. A small local web server built with WEBrick renders three stacked combined graph-and-bucket views and serves a JSON snapshot endpoint

Each sensor is stored in its own time series with labels such as sensor_type, sensor_id, zone, and unit. The dashboard uses TS.MADD to ingest new readings and TS.RANGE to query both raw samples and aggregated bucket summaries. The aggregate queries use aligned buckets so the bucket boundaries stay stable as the visible window moves.

The Ruby files

The implementation is split across three small files:

The Redis helper issues time series commands directly through redis-rb's low-level call method, which keeps the example small while still making the Redis command flow explicit.

Data model

Series keys use this pattern:

ts:sensor:power_consumption:{sensor_id}

For example:

ts:sensor:power_consumption:power-1
ts:sensor:power_consumption:power-2
ts:sensor:power_consumption:power-3

Each time series has labels similar to:

site = demo
sensor_type = power_consumption
sensor_id = power-1
zone = north
unit = watts

The demo uses a 12-second retention period so the graphs visibly slide forward as old samples expire. The setup is also idempotent, so you can stop and restart the demo without first cleaning up the time series keys.

Redis commands used

The implementation uses these time series commands directly through redis-rb:

Prerequisites

Before running the demo, make sure that:

gem install redis webrick

Running the demo

Start the dashboard server:

ruby demo_server.rb

The server accepts optional flags if your Redis instance is not on the default host and port:

ruby demo_server.rb --redis-host 127.0.0.1 --redis-port 6379 --port 8080

You can also override the same values with REDIS_HOST, REDIS_PORT, and PORT.

After starting the server, visit http://localhost:8080.

The dashboard polls a JSON snapshot endpoint several times per second to show:

Because the graph and the bucket summary share the same moving time scale, you can see how raw samples relate to their aggregate bucket without switching views or interpreting a separate table.

What to look for

As you watch the dashboard, pay attention to how the Redis query patterns map to the UI:

Why this shape works well

This demo intentionally uses only three sensors and a very short time horizon. That keeps the visualization small enough to understand at a glance while still demonstrating:

For a first time series example, this is often easier to understand than a larger dashboard with many metrics, filters, or tables.

Production considerations

This example intentionally keeps the server and UI small so the Redis behavior is easy to follow. In production, you would usually want to add:

Learn more

On this page