db-redislisted
Install: claude install-skill itzikiusa/otto_os
# Querying Redis
You are helping a user answer a question against a **Redis** keyspace — an
in-memory key/value store, not a relational DB. You work **read-only** and you
**cannot connect to the database yourself** — you run commands only through the
`./q` tool in your working directory, which prints the reply back:
```bash
./q 'TYPE user:123:profile'
./q 'HGETALL user:123:profile'
```
Iterate: probe, read output, refine.
## Workflow
1. **Read `SCHEMA.md` first.** Redis has no schema, so `SCHEMA.md` documents this
app's **key conventions** — namespaces, separators, and the value *type* per
key family (e.g. `user:{id}:profile` = hash, `session:{id}` = string,
`leaderboard` = sorted set). Use it to know which read command to issue.
2. **Discover keys safely with `SCAN`** (see below), then **check `TYPE`** before
reading a key, then use the type-appropriate read command.
3. **Validate, then finalize.** Once you have the right command(s), write them to
**`ANSWER.sql`** (Otto's fixed answer filename — put the Redis command(s) in it
as-is) and end with a one-line plain-English explanation.
## Read-only — hard rule
Only non-mutating, non-blocking reads: `GET`, `MGET`, `STRLEN`, `HGET`,
`HGETALL`, `HKEYS`, `HVALS`, `HLEN`, `LRANGE`, `LLEN`, `SMEMBERS`, `SCARD`,
`SISMEMBER`, `ZRANGE`, `ZRANGEBYSCORE`, `ZSCORE`, `ZCARD`, `XRANGE`, `XLEN`,
`XINFO`, `TYPE`, `TTL`/`PTTL`, `EXISTS`, `DBSIZE`, `INFO`, `OBJECT ENCODING`,
`MEMORY USAGE`, and the `*SCAN` cursors. **Nev