Redis Stack modules
functionalJSON, Search, TimeSeries, and the probabilistic types as real grids, plus the search index browser in the explorer.
Redis Stack adds JSON documents, full-text and vector search, time series, and the probabilistic types (Bloom and cuckoo filters, top-k, count-min sketch, t-digest) as modules. Their commands answer with nested arrays that are hard to read as one cell, so SQLly shapes them into real grids, and the search indexes show up in the explorer beside the keys. Nothing is required on your side: when the modules are loaded the commands work, and when they are not the server says so in the usual way.
Module replies as grids
| Command | What the grid shows |
|---|---|
JSON.GET | The document as one JSON cell, so the viewer opens the tree; JSON.MGET adds a key column, one row per key. |
FT.SEARCH | One row per document: key, the score, payload and sort key when you asked for them, a column per returned field, and the server's total_results on every row. NOCONTENT lists just the keys. |
FT.AGGREGATE, FT.CURSOR READ | One row per result record with a column per field, plus total_results and, with WITHCURSOR, the cursor id to continue with. |
FT.INFO, FT._LIST | Field / value rows (nested definitions as JSON), and one row per index. |
TS.RANGE, TS.REVRANGE, TS.GET | timestamp as a date and time with milliseconds, value as a number, and the raw timestamp_ms so nothing is lost to formatting. |
TS.MRANGE, TS.MREVRANGE, TS.MGET | The same columns with a leading series and the series' labels as JSON, one row per sample across every matching series. |
TS.INFO, BF.INFO, CF.INFO, CMS.INFO, TOPK.INFO, TDIGEST.INFO | Field / value rows. |
BF.MEXISTS, CF.MEXISTS, TOPK.QUERY, CMS.QUERY, TOPK.LIST | One row per item you asked about, with a true/false or a count beside it. |
GEOPOS, GEOSEARCH, GEORADIUS | member, then dist, hash, lon and lat for the WITH… options you used. |
XINFO STREAM, XINFO GROUPS, XINFO CONSUMERS | Field / value rows for the stream; one row per group or consumer with a column per field. |
LATENCY LATEST, LATENCY HISTORY | Each event with when it was measured and its latest and maximum milliseconds; each spike with its time and latency. |
The grid looks the same whether the server answers in the classic reply protocol or
the newer one with maps and doubles: columns, types and rows agree. Numbers the
module defines as numbers (time-series values, distances, coordinates, scores) come
back as numbers so sorting and charting work; everything else stays the text the
server sent. BITFIELD and PFCOUNT already read fine as
index / value and a single count, and commands without a tailored shape, such as
FT.PROFILE, keep the generic one.
Charting a time series
A TS.RANGE result is a chart waiting to happen. Double-click a time-series
key in the key browser and it opens straight on the Chart tab as a line
with the timestamp on the horizontal axis - the tab's script carries a
-- sqlly chart: hint you can edit, and the Redis parser treats those lines as
comments. A range you type yourself opens on the Grid tab; switch to Chart and the
timestamp is already the label column.
The index browser
On a server with the search module, every Redis database in the explorer gains an Indexes folder ahead of its key folders. Each index shows how many documents it holds, whether it indexes hashes or JSON documents, and the key prefixes it covers. SQLly asks the server once per session; a server without the module simply has no folder, and nothing is logged or retried.
| Menu item | What it does |
|---|---|
| Open (FT.INFO) | Runs FT.INFO in a new tab - the definition, attributes and statistics. Double-clicking the index does the same. |
| Query… | Opens a tab seeded with FT.SEARCH index "*" LIMIT 0 100 for you to edit and run. |
| Explain… | Opens FT.EXPLAIN with a placeholder query. |
| Profile… | Opens FT.PROFILE … SEARCH QUERY with a placeholder query. |
| Drop Index… | Opens a reviewed FT.DROPINDEX script. The documents are kept unless you append DD; running it goes through the destructive-command confirmation, and the entry is greyed out on a connection that cannot write. |
The folder's Refresh re-reads the index list. Search indexes are server-wide, so the same folder appears under every logical database.