DB
oracle/skills
Oracle Database guidance for SQL, PL/SQL, SQLcl, ORDS, Oracle Vector SDK, administration, app development, performance, security, migrations, and agent-safe database workflows.
A skill your agent uses when using Redis or any Redis-protocol store (Valkey, ElastiCache, Upstash, Dragonfly, Memorystore) as a cache, queue, rate limiter or distributed lock and it has to be…
$ npx skills add ericrisco/rsc-harness --skill redis -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness redis --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/redis .claude/skills/redis && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "redis" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/redis into .claude/skills/redis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "redis", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/redisType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill redis -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness redis --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/redis .agents/skills/redis && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "redis" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/redis into .agents/skills/redis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "redis", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill redis -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness redis --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/redis .cursor/skills/redis && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "redis" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/redis into .cursor/skills/redis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "redis", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/redis--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill redis -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness redis --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/redis .gemini/skills/redis && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "redis" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/redis into .gemini/skills/redis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "redis", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness redisInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill redis -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/redis .github/skills/redis && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "redis" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/redis into .github/skills/redis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "redis", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill redis -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness redis --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/redis .opencode/skills/redis && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "redis" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/redis into .opencode/skills/redis/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "redis", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
redisA skill your agent uses when using Redis or any Redis-protocol store (Valkey, ElastiCache, Upstash, Dragonfly, Memorystore) as a cache, queue, rate limiter or distributed lock and it has to be…
Redis is an agent skill from ericrisco/rsc-harness. Use when using Redis or any Redis-protocol store (Valkey, ElastiCache, Upstash, Dragonfly, Memorystore) as a cache, queue, rate limiter or distributed lock and it has to be CORRECT rather than merely connected — stampede-proof caching, locks that cannot release someone else's hold, race-free rate limits, and jobs that survive a worker crash. NOT durable SQL queues with SELECT FOR UPDATE SKIP LOCKED (that is postgresdb), NOT vector similarity search over embeddings (that is vector-db).
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/caching.md`).
It sits in Databases, covering Caching, Rate limiting and Vector databases. It works with Redis, SQL and Upstash. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
10 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
redis-cliFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Redis loads about 4.3k tokens when it runs, and up to ~8.4k if it reads all its reference files. Until then it costs about 125 tokens; SKILL.md has 1,651 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,651 words, ~4,321 tokens.
.claude/skills/redis/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Redis is four primitives wearing one server: a cache, a distributed lock, a rate
limiter, and a job queue. Each has a correctness contract that has nothing to do with
whether SET returns OK. You almost certainly already "have Redis working" — a value goes
in, a value comes out. What you do not yet have is a cache that won't stampede your database, a
lock that won't release someone else's hold, a rate limiter that survives concurrent requests,
and a queue whose jobs aren't silently lost when a worker dies. This skill is engine- and
pattern-level, client-SDK-agnostic: examples are redis-cli and Lua, so they hold across
node-redis, ioredis, redis-py, go-redis, and Lettuce. Every pattern applies unchanged to Valkey
and any Redis-protocol store, since Valkey is a BSD fork of Redis 7.2 and stays protocol-compatible.
Use when you are:
SET NX PX + Lua-release + fencing-token contract, and the Redlock call.INCR+EXPIRE is a race.maxmemory-policy, RDB vs AOF, cache mode vs database mode.KEYS *, unbounded keys, non-atomic read-modify-write,
missing TTL, a lock released by the wrong owner.NOT for (route instead):
SELECT … FOR UPDATE SKIP LOCKED), engine-level SQL caching →
../postgresdb/SKILL.md. Boundary: if the durable store is the
queue, that's postgresdb; if Redis is the queue, you're here.../vector-db/SKILL.md. Redis 8 vector sets are only noted here.../clickhouse-analytics/SKILL.md.../scaling/SKILL.md. This skill owns the Redis-specific data contract underneath.../fly-io/SKILL.md / ../aws-essentials/SKILL.md.
This skill gives the client-side contract, not console clicks.../nodejs/SKILL.md
or your language skill.KEYS * in production — use SCAN. KEYS is O(N) and blocks the single thread;
one bad pattern freezes every client.GET then SET/INCR races under concurrency.
Use one Lua EVAL, a single atomic command, or WATCH/MULTI.PX + Lua compare-and-delete. Plain DEL releases whoever holds it
now (maybe not you); a lock with no PX is held forever if the owner crashes.maxmemory-policy deliberately. The default noeviction makes a full cache fail every
write — correct for a database, fatal for a cache.RPOP straight into a worker loses the job if the worker dies
mid-task; use a processing list or Streams consumer groups.LTRIM; streams without MAXLEN ~.MULTI/EXEC
blocks all clients, not just yours.svc:entity:id (e.g. cart:user:42) so scans, eviction, and humans can reason.noeviction. Decide which Redis is before you tune it.| Need | Structure | Canonical commands | The one gotcha |
|---|---|---|---|
| Cache | string / hash + TTL | SET k v EX 300 / GETEX / HSET+EXPIRE | stampede on expiry |
| Lock | string + random token | SET k tok NX PX 30000 + Lua compare-and-DEL | wrong-owner release |
| Rate limit | string / zset / hash | one atomic EVAL (window/log/bucket) | lost EXPIRE → immortal counter |
| Queue (simple) | list | LMOVE src proc LEFT RIGHT / BRPOPLPUSH | job loss on crash without a processing copy |
| Queue (reliable) | stream | XADD / XREADGROUP / XACK / XAUTOCLAIM | unacked PEL grows unbounded |
Namespace + TTL with jitter. A fixed TTL on a batch of keys written together synchronizes their expiry — they all die in the same second and stampede the origin at once. Add jitter.
# Bad: 1000 keys warmed in a loop with the same TTL all expire together
SET product:42 "$json" EX 300
# Good: spread expiry with per-key jitter (300s ± up to 60s)
SET product:42 "$json" EX $(( 300 + RANDOM % 60 ))Cache-aside (read path). Why: it is the default for read-heavy data; the trap is forgetting the TTL and forgetting to cache the miss.
# Bad: cache only hits, never the miss → every request for an absent id hits the DB
val = GET product:42
if val == nil: val = db.fetch(42); SET product:42 val EX 300 # absent rows still hammer the DB
# Good: cache-aside with negative caching
val = GET product:42
if val == "__MISS__": return null # cached miss, no DB call
if val == nil:
val = db.fetch(42)
if val == null: SET product:42 "__MISS__" EX 30 # short negative TTL
else: SET product:42 val EX 300Stampede prevention. When a hot key expires, N concurrent requests all miss and hammer the origin. Two mitigations:
Recompute lock — one request rebuilds, the rest briefly serve stale or wait. The lock TTL must exceed worst-case origin latency, or two requests rebuild anyway.
# On miss, try to claim the rebuild; only the winner recomputes
SET product:42:lock 1 NX PX 5000 # 5s > slowest DB rebuild
# winner: rebuild, SET product:42, then DEL product:42:lock
# losers: serve last-known value or retry after a short sleepProbabilistic early expiration (XFetch) — refresh before TTL with rising probability so one
request renews early while others still hit a warm key. Math + write-through/read-through/
write-behind in references/caching.md.
Invalidation: on write, either delete the key (next read rebuilds) or write-through. Never rely on manual invalidation instead of a TTL — you will miss a path and serve stale forever.
# Bad: GET-then-DEL races — between your GET and DEL the lock can expire and a NEW owner takes it,
# and your DEL frees THEIR lock.
GET resource:lock # == my token?
DEL resource:lock # ← may delete someone else's lock
# Good: claim with a random token + PX, release only if the token is still mine (atomic Lua).
SET resource:lock "$TOKEN" NX PX 30000 # NX = only if absent; PX = auto-expire so a crash frees itRelease must be a compare-and-delete in one Lua step:
-- KEYS[1] = lock key, ARGV[1] = my token. Returns 1 if I held and released it, else 0.
if redis.call('GET', KEYS[1]) == ARGV[1] then
return redis.call('DEL', KEYS[1])
else
return 0
endTTL vs work duration. If the protected work can outlast PX, the lock expires mid-task and a
second worker starts. Either size PX above the worst case, or run a watchdog that renews the TTL
(again via a token-checked Lua PEXPIRE) while work continues — never blindly PEXPIRE.
Fencing tokens. A GC pause or a long syscall can freeze the lock holder past expiry; another worker acquires, then the paused one wakes and writes — both think they hold the lock. The only fix is a fencing token: a monotonically increasing number issued with the lock and checked by the protected resource, which rejects any write carrying a stale token. No Redis lock alone provides this.
Redlock decision. Single-instance
SET NX PXis fine when occasional double-execution is tolerable (idempotent work, best-effort cron de-dup). For hard mutual exclusion, a single Redis lock is not enough and multi-instance Redlock is contested (it assumes bounded clock drift and no long pauses) — fence the resource or use a lease/consensus system. Full Redlock walk-through and critique inreferences/locks-and-rate-limiting.md.
# Bad: GET/INCR then EXPIRE as two steps. If the process dies (or loses the race) between INCR and
# EXPIRE, the key has NO TTL and counts forever — the user is throttled permanently.
n = INCR rl:user:42
if n == 1: EXPIRE rl:user:42 60 # ← may never runFixed window, done atomically in one EVAL:
-- KEYS[1] = counter, ARGV[1] = limit, ARGV[2] = window seconds. Returns 1 = allow, 0 = deny.
local n = redis.call('INCR', KEYS[1])
if n == 1 then redis.call('EXPIRE', KEYS[1], ARGV[2]) end -- TTL set atomically with the first hit
if n > tonumber(ARGV[1]) then return 0 end
return 1Fixed window allows up to 2× the limit across a boundary. For smoother limits:
ZREMRANGEBYSCORE (drop entries older than the window) → ZCARD (count) → ZADD (record now) →
EXPIRE. Exact, but O(requests) memory per key.{tokens, last_refill}; refill by elapsed time and decrement,
all in one Lua. Allows bursts up to bucket size, then a steady rate. Smallest memory.Choose by accuracy-vs-memory; full Lua for all four in
references/locks-and-rate-limiting.md.
| Option | When | Acks / recovery |
|---|---|---|
| List | simplest at-least-once, low volume | manual: processing list + requeue stalled |
| Stream | reliable jobs, consumer groups, native acks | XACK + XAUTOCLAIM for stalled/pending |
| Library (BullMQ/Sidekiq/RQ/Celery) | you want retries, scheduling, a dashboard | built-in; don't hand-roll |
Reliable list: never RPOP straight into the worker — a crash mid-task loses the job. Move it to
a per-worker processing list atomically, then ack by removing it.
job=$(redis-cli LMOVE jobs jobs:proc:w1 LEFT RIGHT) # atomic: pop from jobs, push to processing
# ... do work (idempotently) ...
redis-cli LREM jobs:proc:w1 1 "$job" # ack: remove from processing
# a reaper requeues anything left in jobs:proc:* after a worker diesStreams (preferred for reliable jobs): consumer groups give per-message acks and a Pending Entries List for recovery.
redis-cli XGROUP CREATE jobs g1 '$' MKSTREAM
redis-cli XREADGROUP GROUP g1 worker1 COUNT 10 BLOCK 5000 STREAMS jobs '>'
# ... process ...
redis-cli XACK jobs g1 "$id" # ack a done message
redis-cli XAUTOCLAIM jobs g1 worker2 60000 0 # reclaim messages idle > 60s (stalled worker)Delivery is at-least-once: a message can be reprocessed after a crash, so make handlers
idempotent (dedupe on a job id / idempotency key). Reach for BullMQ (TypeScript; stalled-job lock
renewal via lockDuration/lockRenewTime), Sidekiq (Ruby), or RQ/Celery (Python) when
you want retries, delays, and a dashboard — don't reinvent them. Full implementations, DLQ, and the
library comparison in references/queues.md.
maxmemory-policy | Behavior | Use for |
|---|---|---|
noeviction (default) | writes fail when full | Redis-as-database (durable data you can't drop) |
allkeys-lru / allkeys-lfu | evict any key by recency / frequency | a pure cache (every key is disposable) |
volatile-lru / volatile-ttl / volatile-lfu | evict only keys that have a TTL | mixed: durable keys without TTL stay |
A "cache" running noeviction with no TTLs is a memory leak that starts 500ing writes when full —
the single most common Redis incident. Set maxmemory and an allkeys-* policy for a cache.
Persistence: RDB = periodic point-in-time snapshots (fast restart, can lose the last interval); AOF = append every write (durable, slower, larger). A pure cache often needs neither — losing it just rebuilds from the origin. Decide cache-mode vs database-mode first, then persistence follows.
| Rationalization | What actually happens | Do instead |
|---|---|---|
"INCR then EXPIRE is fine" | a lost EXPIRE leaves a TTL-less counter → immortal throttle | one atomic EVAL (set TTL when n == 1) |
"I'll GET then DEL the lock" | races; frees a different owner's lock | random token + Lua compare-and-delete |
"KEYS user:* to find my keys" | O(N), blocks the single thread, freezes all clients | SCAN MATCH user:* COUNT 100 |
| "No TTL, I'll invalidate manually" | you miss a path → stale forever + unbounded memory | TTL on every cache key, always |
| "Redlock means the lock is safe" | a GC pause double-acquires; clock-drift assumptions | fence the resource, or accept double-run on idempotent work |
"RPOP the job into the worker" | worker dies mid-task → job vanishes | LMOVE to a processing list, or Streams + XACK |
"Big MULTI / long Lua = throughput" | single thread blocks every client for the duration | keep each atomic step short; chunk the work |
| "Fixed-window limiter is exact" | allows ~2× the limit across the window boundary | sliding-window log or token bucket if exactness matters |
# Cache: SET k v EX 300 | GETEX k EX 300 | DEL k | SCAN 0 MATCH 'product:*' COUNT 100
# Lock: SET k tok NX PX 30000 (release via the Lua compare-and-delete above)
# Rate limit: EVAL "<lua>" 1 rl:user:42 100 60 (limit 100 / 60s)
# Queue: LMOVE jobs jobs:proc LEFT RIGHT | LREM jobs:proc 1 "$job"
# XADD jobs '*' field v | XREADGROUP ... | XACK | XAUTOCLAIM
# Diagnostics (read-only):
redis-cli INFO memory # used_memory, maxmemory, evicted_keys
redis-cli --bigkeys # find the keys eating your memory
redis-cli SLOWLOG GET 10 # slowest recent commands
redis-cli OBJECT FREQ mykey # access frequency (needs allkeys-lfu)
redis-cli MEMORY USAGE mykey # bytes for one key
redis-cli SCAN 0 MATCH 'sess:*' COUNT 100 # never KEYS in prodscripts/verify.sh scans your project for the high-confidence foot-guns (KEYS * in source,
lock release without a token compare, INCR with no EXPIRE, maxmemory with no policy). It is
read-only, never connects to a server, and exits 0 when no Redis usage is found.
Record this project's Redis decisions in 02-DOCS/wiki/stack/redis.md (recorded, not gated — same
convention postgresdb uses): which primitive(s) you run, the maxmemory-policy, persistence
(RDB/AOF/none), the client library, and any lock/rate-limit Lua you depend on. Future agents read
this before touching the cache.
references/caching.md — read/write-through, write-behind, XFetch math, negative caching, hot/big keys.references/locks-and-rate-limiting.md — full Redlock + critique + fencing, watchdog renewal, all four rate-limit algorithms with Lua.references/queues.md — full reliable-list + Streams implementations, XAUTOCLAIM recovery, DLQ, BullMQ/Sidekiq/RQ/Celery detail, idempotency.../postgresdb/SKILL.md · ../vector-db/SKILL.md · ../scaling/SKILL.md · ../clickhouse-analytics/SKILL.md.© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (scripts, references) in skills/redis of ericrisco/rsc-harness.
Open the folder on GitHubat commit 92fde8f
Redis next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Redis this skillericrisco/rsc-harness | 156 | — | ~4.3k | Automated safety check: Pass | MIT | |
| DBoracle/skills | 872 | — | ~1.4k | Automated safety check: Pass | UPL-1.0 | |
| Upstash Redisgithub/awesome-copilot | 40k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Crudwujun728/jun_java_plugin | 240 | — | ~2.8k | Automated safety check: Pass | None | |
| Upstash Redis Kvintellectronica/agent-skills | 295 | — | ~2.8k | Automated safety check: Warn | CC0-1.0 | |
| AWS Storageaws/agent-toolkit-for-aws | 2.8k | — | ~5.8k | Automated safety check: Pass | Apache-2.0 |
oracle/skills
Oracle Database guidance for SQL, PL/SQL, SQLcl, ORDS, Oracle Vector SDK, administration, app development, performance, security, migrations, and agent-safe database workflows.
github/awesome-copilot
Use Redis over HTTP from serverless and edge runtimes with @upstash/redis, and add rate limiting with @upstash/ratelimit.
wujun728/jun_java_plugin
一键生成完整业务模块代码(SQL/Entity/DAO/XML/Repository/Service/Controller/Mapper/POJO),用于创建新的业务功能
intellectronica/agent-skills
Read and write to Upstash Redis-compatible key-value store via REST API.
aws/agent-toolkit-for-aws
Selects, investigates, and compares AWS object, file, and block storage services, and answers cost, performance, configuration, security, and troubleshooting questions about storage services.
secondsky/claude-skills
A skill your agent uses when working with Redis in Bun (ioredis, Upstash), caching, pub/sub, session storage, or key-value operations.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Categories
A skill your agent uses when using Redis or any Redis-protocol store (Valkey, ElastiCache, Upstash, Dragonfly, Memorystore) as a cache, queue, rate limiter or distributed lock and it has to be…. Redis is an agent skill from ericrisco/rsc-harness. Use when using Redis or any Redis-protocol store (Valkey, ElastiCache, Upstash, Dragonfly, Memorystore) as a cache, queue, rate limiter or distributed lock and it has to be CORRECT rather than merely connected — stampede-proof caching, locks that cannot release someone else's hold, race-free rate limits, and jobs that survive a worker crash.
Redis fits situations like: any Redis-protocol store (Valkey; memorystore) as a cache; distributed lock and it has to be CORRECT rather than merely connected — stampede-proof caching; locks that cannot release someone elses hold.
Run `npx skills add ericrisco/rsc-harness --skill redis -a claude-code`. Or copy the skill folder (skills/redis in ericrisco/rsc-harness) into .claude/skills/redis in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill redis -a codex`. Or copy the skill folder (skills/redis in ericrisco/rsc-harness) into .agents/skills/redis in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill redis -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/redis, .gemini/skills/redis, .github/skills/redis and .opencode/skills/redis in your project.
Going by SKILL.md and its folder, Redis needs a shell for the scripts in its folder and the command-line tools its instructions call (redis-cli). Our summary lists: Node.js; A Bash shell.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Redis is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Redis: DB (oracle/skills, 872 stars), Upstash Redis (github/awesome-copilot, 40k stars), Crud (wujun728/jun_java_plugin, 240 stars) and Upstash Redis Kv (intellectronica/agent-skills, 295 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.