Skip to content

Redis probe

The Redis probe sends an ordered sequence of Redis commands to a server and records the reply to each one. VirtuProbe speaks RESP directly, written against the protocol specification rather than wrapped around a client library, so every command and every reply is visible as it went over the connection.

A probe is a sequence rather than a single query: authenticate, write a key, read it back, check the TTL, and every step is one row in the history with its own reply.

Switch with the Action / Advanced toggle above the editor.

Action mode picks one thing to do and builds the commands for it. It runs as ordinary Redis commands, so every one of them still appears in the history.

Advanced mode is the command sequence itself, for the cases Action mode does not cover.

The Redis probe editor: connection row, Advanced mode, and the command sequence

FieldDescription
HostHostname or IP of the Redis server
PortServer port (default: 6379)
DatabaseDatabase index. 0 is the Redis default and sends no SELECT
TLS modeDisabled, Required, or Verify certificate and hostname
Trust self-signed certificatesSkip certificate validation for this probe. Lab use
CredentialA Basic credential from the credential store

The credential is sent as an AUTH command, so its reply appears in the history like any other. A NOAUTH refusal is therefore a visible result rather than a connection that silently did not work.

ActionWhat it sendsFields
Ping the serverPINGnone
Read a keyGET and the commands the chosen return needsKey, Return
Write a keySET, with an expiry when one is givenKey, Value, Expire after (seconds)
Server infoINFOSection, Field
Find keysSCANPattern, Limit

Read a key has a Return selector: The value, Whether it exists, Time to live or Its type. They are different questions, and a key holding an empty string answers the first one with nothing while still existing.

Find keys uses SCAN rather than KEYS, because KEYS blocks the server while it walks the whole keyspace. Limit bounds how much of the keyspace one send covers.

Server info takes a Section such as server, clients, memory or replication, and blank returns everything. Field names one field, such as redis_version, and highlights it in the reply.

The Command sequence section holds the commands in the order they will be sent.

FieldDescription
CommandThe Redis command, for example SET or HGETALL
ArgumentsSeparated by spaces. Use quotes to keep a value with spaces together
Expected reply(optional) The command passes only if its reply contains this
EnabledClear it to keep a command in the probe without sending it

A command that modifies the server carries a Modifies target chip, and one VirtuProbe does not recognize carries Unrecognised command. An unrecognized command is still sent, since sending something the server has never heard of is a legitimate thing to want.

Each send produces an Exchanges list, one row per command, which expands to show the reply. The row carries the command, the reply type, the duration, and an error if the server returned one.

The exchanges list after a send: AUTH, GET, TTL, HGETALL and LRANGE with their reply types

The reply type is the RESP kind: SIMPLE_STRING, ERROR, INTEGER, BULK_STRING, ARRAY, NULL and so on. A key that is absent answers NULL while a key holding an empty string answers BULK_STRING, and the reply text is empty either way.

ExtractorReturns
REDIS_SUCCESS"true" when the transport was fine and every exchange met its expectation
REDIS_REPLYThe reply text of one exchange. Expression names a command, such as GET or GET user:1; blank means the last exchange
REDIS_REPLY_TYPEThe RESP kind of a reply
REDIS_INTEGERAn integer reply as text: DBSIZE, TTL, EXISTS, the count from a DEL. Blank rather than zero when the reply was not an integer
REDIS_ARRAY_ITEMSThe elements of an array reply, one per line, which is the shape an ITERATE step consumes. A SCAN reply is unwrapped so the cursor is not iterated as though it were a key
REDIS_INFO_FIELDOne field out of an INFO reply, such as redis_version. The expression is required here
REDIS_ERRORThe server error message of an exchange, blank when it did not answer with an error

An error reply is a normal result. NOAUTH against an unauthenticated connection, or WRONGTYPE against a key of the wrong shape, is frequently the finding a probe went looking for.

See Extractors for the full list.

Redis is a first-class chain step. {{variable}} placeholders resolve into the host, the database and the command arguments before the sequence is sent. A common pattern is HTTP then Redis: call an API that is supposed to cache something, then read the key and assert on it with REDIS_REPLY.

REDIS_ARRAY_ITEMS feeds an ITERATE step directly, so a SCAN for session:* can drive one child step per key.

virtuprobe-docker ships a Redis target. Bring up either the standalone one or the whole fleet:

Terminal window
cd virtuprobe-docker/redis-simple && docker compose up -d

It listens on 6379 with the password Password123!, and it is seeded with one key of each type so a read exercises every branch of the type detection: greeting and counter and expiring as strings, queue:jobs as a list, user:1 as a hash, tags:active as a set, leaderboard as a sorted set, key with spaces, and binary:crlf, whose value carries a line break.

The password means a probe exercises the AUTH exchange, and both the success and the refusal show up as replies.

  • Hand-rolled RESP. The client is written against the protocol specification, so a probe can send a command the server will reject and still show you exactly what came back.
  • Framed by length, not by scanning for a terminator. A bulk string carries its own length, so a value containing a line break survives a round trip intact. The seeded binary:crlf key exists to prove it.
  • The TLS field is tlsMode, spelled the way MongoDB spells it. MySQL and PostgreSQL call the same idea sslMode. This matters only when writing a probe file by hand or over MCP, where an unrecognized key is dropped in silence and the probe then connects in the clear.