Redis in SQLly: key editing, Cluster, Sentinel and more
Redis in SQLly now edits keys by type, shows stream consumer groups, completes commands, and connects to Cluster, Sentinel and Azure Redis with Entra.
The short version
SQLly's Redis support grew from a command editor with a key browser into a Redis workbench.
You can open a key and edit it by type, with the exact command shown before it runs. Streams show their consumer groups and the entries nobody acknowledged. Commands complete as you type. Connections reach Redis Cluster, Sentinel and Azure Redis with Entra sign-in. And Test Connection tells you which step failed. This post covers what is in the release, why we built it, what we proved, and what is still missing.
Why we built it
SQLly is for teams whose Redis sits next to their SQL databases: the session cache in front of
PostgreSQL, the job queue beside SQL Server. Until now, Redis in SQLly was good for reading
and watching: a command editor, a key browser, a profiler, a Pub/Sub viewer, a memory analyzer.
But changing a hash field meant typing HSET by hand, and a cluster or a
Sentinel deployment was out of reach. People kept a second Redis tool open for those jobs.
This release is meant to close that gap.
We also read the public Redis Insight issue tracker. Redis Insight is the official tool and the
deepest Redis GUI there is, and our comparison page says where
it is still the better choice. But its reported issues are a good list of what goes wrong when a
GUI meets a real Redis deployment, and several of them shaped the decisions below:
a cluster reached through locally forwarded SSH ports failing with "Failed to refresh slots
cache" (#6537), SSH tunnels
dropping after sitting idle (#6292),
a cloud import that lost its TLS settings and then failed with read ECONNRESET
(#6019), a hash value of
00014 treated as a number (#6269),
MessagePack timestamp decoding (#5540,
fixed in Redis Insight 3.4.1), an incomplete cluster topology with TLS and hostnames
(#5722), Entra ID behind a
TLS-inspecting proxy (#6472), and a
request for names on logical databases (#6437).
Some of these are old and some are fixed. We cite them because they describe the problems
clearly, not because Redis Insight still has them.
Read and change keys
Double-click a key in the explorer, or choose Open Value, and it opens in the
key view. A header strip shows the key's type, TTL,
encoding, memory and length. Below it the value loads 1,000 fields, elements, members or
entries at a time, with a "showing N of M" count and Load more. Each type gets the
edits it allows: Edit value… on a string (with KEEPTTL ticked when the
key has an expiry), Add field… and Edit selected… on a hash, pushes
and removes on a list, members on a set, scores on a sorted set, Edit document… on
JSON. Every form shows the command it will run and updates it as you type. Nothing runs until
you press Run. Read-only and locked production connections refuse the edit, and a connection that
confirms data changes asks for a second click. Open in Query Tab still runs the
type's read command in a tab if you prefer that.
redis-key-view-hash-edit.webp — the key view on a hash, with the header strip, the paged field grid, the selected field's value below it, and the Add field form showing the exact HSET above Run
Values are bytes from end to end. 00014 stays 00014, a twenty-digit id
is never rounded, and a value that isn't valid text is shown and edited as hex. We'll go into
how that was tested in the follow-up on
byte-exact values.
A stream key opens with four tabs: Entries, Groups, Consumers and Pending. The Pending tab lists every delivered entry nobody acknowledged, with its owner, idle milliseconds and delivery count, so a consumer that died mid-batch is easy to spot. From there Claim selected… and Auto-claim… move its entries to a live consumer. Trimming a stream or destroying a group asks you to type the count or the group name first. The walkthrough is in finding a dead consumer.
redis-stream-pending-dead-consumer.webp — a stream's Pending tab for the workers group, with two entries held by consumer dead and their idle milliseconds growingA key's menu also has Rename…, Copy to Database… and Copy to Connection…. Folders and databases have Export Folder as Command File… and Export as Command File…. These write the keys as commands that Import Command File… runs back, with binary values escaped, so the round trip is byte-exact (see bulk actions). The value viewer now decodes gzip, zstd, LZ4, deflate, Base64, Protobuf (without a schema), PHP serialize, and Java and Python pickle summaries, in addition to UTF-8, JSON, hex and MessagePack. Auto mode recognises them by their leading bytes.
Write commands
Redis query tabs now have command IntelliSense.
It completes command names, the options that still fit (after SET k v EX 10 it stops
offering KEEPTTL), subcommands, and key names the explorer has already scanned. It
gets its command list from the server's own COMMAND DOCS, so Stack modules and
commands you loaded yourself complete too. Hovering a command shows its syntax and complexity
with a Write, Destructive or Blocking badge, so you see what a line does before you run it.
More in the IntelliSense post.
redis-intellisense-zrange-options.webp — the completion popup after ZRANGE k 0 -1 offering BYSCORE, BYLEX, REV, LIMIT and WITHSCORES, with signature help above the line
Redis Stack replies come back as real grids:
FT.SEARCH gives one row per document, TS.RANGE a timestamp column you can
chart, and the JSON, Bloom, cuckoo, top-k, count-min, geo, stream-info and latency commands
each get the columns their replies imply. On a server with the search module, each database
gets an Indexes folder with Query…, Explain…, Profile… and a reviewed Drop Index….
Connect
- Redis Cluster, including ElastiCache cluster mode and MemoryDB. Commands are routed by slot and
MOVED/ASKredirects are followed. A node map rewrites announced addresses you can't dial, and each node gets its own SSH forward. The key browser, memory analyzer, bulk delete, Profiler and Pub/Sub viewer cover every master, and each live row names its node. The Cluster Topology… view has a per-node Trace. Details in Redis Cluster behind SSH. - Sentinel by master name, for Redis and Valkey, with a
redis+sentinel://URL and optional replica reads. After a failover a read-only script retries and a write script stops. Why: failover without double writes. - Microsoft Entra sign-in for Azure Cache for Redis and Azure Managed Redis. It uses the same Azure account as your Azure SQL connections and re-authenticates before the token expires.
- RESP3 when the server offers it, with RESP2 as the fallback and results that look the same either way. Every connection names itself
sqlly:<connection name>:<process id>so you can find it inCLIENT LIST. There is a command timeout (30 seconds by default), and timed-out commands are never re-run. - Test Connection step by step. It runs name lookup, tunnel or proxy, TCP, TLS, AUTH, HELLO/PING, SELECT and CLUSTER INFO, and the error starts with the step that failed: "TLS failed: …", "AUTH failed: …". See every step of Test Connection.
- SSH keepalives every 30 seconds of silence. If the session drops anyway, a fresh tunnel opens on the next run, which says Tunnel re-established and re-runs nothing.
- OS trust roots. Tick "Also trust the OS keychain roots" and a company CA installed on your machine verifies without a CA file. A CA file now adds to the built-in roots instead of replacing them.
Operate
- Key events in the Pub/Sub viewer. The preset subscribes to every keyspace notification on a database and fills event and key columns. When notifications are off, the viewer offers Enable Key Events (KEA)… as a reviewed
CONFIG SET. - Sharded Pub/Sub. Enter
#ordersand the viewer watches it withSSUBSCRIBE, on a cluster or a standalone Redis 7. - An ACL page in the Security tool. It lists every user and the recent denials, and writes changes as reviewed
ACL SETUSERscripts with passwords as hashes. - Database names. Right-click a database, choose Rename…, and it shows as db3 — sessions. Show Only Databases… hides the empty ones. Both are kept on your machine and never change the server.
- An honest key browser. A walk stops at 10,000 keys and the tree draws 2,000 rows. One note row says which cut applied: "Showing 2,000 of 7,350 rows from 10,000 scanned keys; the SCAN stopped there". Scan more continues the same scan. The pattern you filter a database with is remembered for that database, Filter Keys… offers your last five patterns, and Clear Key Filter shows everything again.
- Stoppable counts. The bulk dry-run count and the memory analyzer's sample both have a Stop button. A stopped count is labelled partial, and the action touches only the keys it listed.
redis-key-browser-note-row.webp — a database with more than 10,000 keys expanded in the explorer, the note row at the bottom reading "Showing 2,000 of … rows from 10,000 scanned keys; the SCAN stopped there" with its menu open on Load more and Scan moreMove in
Import From Other Tools… now reads Redis Insight database exports, plain or base64. Each database becomes a Redis connection with its host, port, database, user, SSH tunnel and TLS settings. TLS is never dropped. Certificates are saved as files only you can read, and passwords go to your system keychain. Entra databases come over with Entra sign-in, cluster databases as Redis Cluster connections, and Sentinel databases as Sentinel connections. Delete the export afterwards, because it holds passwords in clear text (importing from Redis Insight).
redis-import-redis-insight-summary.webp — the connection list after importing a Redis Insight export, with the new standalone, TLS, cluster and Sentinel connections and the import summary in the status barThe deep dives
This post is the map. Six follow-ups each take one part of the release and explain the decisions behind it:
- Redis values are bytes: a byte-exact key editor: why
00014never becomes 14, and how every edit form shows its command first. - Redis Cluster behind SSH, NAT and Docker: slot routing, the node map, and one SSH forward per node.
- Redis Sentinel failover without double writes: why reads retry and writes stop.
- Redis IntelliSense built from COMMAND DOCS: completion, signature help and hover badges from the server's own docs.
- Redis streams: find and fix a dead consumer: the Pending tab, Claim and Auto-claim.
- Redis Test Connection that shows every step: the staged check, and the same check per cluster node.
If you would rather skim, the Redis page has the whole tour, Cluster and Sentinel covers high-availability setups, and the Valkey page says what works on Valkey and the other Redis-compatible servers.
What we proved
A live suite pushes the values a numeric conversion would mangle through the command editor,
the key browser, a hash read and the Pub/Sub viewer: 00014, the empty string, a NUL
byte, invalid UTF-8, a 40-digit integer, 1e309, and 100 KB and 2 MB strings. It
checks that the same bytes come back as text and never as a number. The suite passed on Redis 7,
Redis Stack, Valkey 8, KeyDB and DragonflyDB, and the three TLS modes passed against a TLS-only
server. CSV, JSON, Excel and SQL exports write those values as text too.
Then we timed the tools on a database of 1,000,000 keys (SET wsl:<n> with a 20-byte
value, Redis 7.4.11 in a loopback container on Apple Silicon):
The bulk dry run listed its cap of 25,001 keys in 0.133 s, and the default 1,000-key memory sample
took 0.009 s. These are loopback numbers. A remote server adds one round trip per 1,000-key
SCAN page and per 200-key MEMORY USAGE chunk. Every path has a cap and
says when it hit it. The matrix in that report was recorded before cluster routing and Sentinel
landed. Those two have their own opt-in live tests against a local three-master cluster and a
three-sentinel fixture, and they are not part of the timings above.
What is not done
- No live test yet against Azure Managed Redis, ElastiCache or MemoryDB. Entra sign-in was tested with a scripted identity provider and a local Redis standing in for the cache.
- The Profiler and the RESP2 Pub/Sub fallback don't re-authenticate Entra mid-capture. They end when their token expires.
- KeyDB has no
COMMAND DOCS, so completion there uses the bundled Redis 7.4 snapshot. DragonflyDB refusesnotify-keyspace-events, so key events can't be turned on there. - No vector-set editor, and no index-creation wizard or saved-query library for Search.
- Sentinel profiles refuse SSH tunnels, proxies and relay routes.
- On a cluster, cross-slot multi-key commands,
SELECTof anything but 0,KEYS,SCANandMULTI/EXECare refused, with a message naming the rule.
Everything above is in the current build. Download SQLly, paste a
redis:// URL, and double-click a key. The Redis docs
cover each tool.