NOSCRIPT No matching script. Please use EVAL Redis Origin: Data OSI layer 7 · Application Last updated 5 Nov 2026

Redis: (error) NOSCRIPT No matching script. Please use EVAL.

EVALSHA referenced a script hash the server doesn't have cached (after restart, failover, or SCRIPT FLUSH).

Exact message you may see NOSCRIPT No matching script. Please use EVAL.(error) NOSCRIPT No matching script. Please use EVAL.ReplyError: NOSCRIPT No matching scriptredis.exceptions.NoScriptError: No matching script. Please use EVAL.NOSCRIPT No matching script
Seen on: Redis Node.js Python

Meaning

Script caches aren't persisted or replicated reliably. Clients should fall back to EVAL (libraries like ioredis defineCommand, redis-py register_script do this automatically). If your code calls EVALSHA directly, catch NOSCRIPT and call SCRIPT LOAD/EVAL. In Redis 7 consider Functions (FCALL).

Common causes

  • Redis restarted / failed over / replica promoted
  • SCRIPT FLUSH executed
  • Different node (cluster) without the script
  • Hash computed incorrectly
  • Managed service flushing script cache

⚡ Quick fix

  1. Use library helpers that auto-reload scripts (register_script, defineCommand)
  2. On NOSCRIPT: SCRIPT LOAD then retry or use EVAL
  3. Consider Redis Functions

Detailed fix by platform

Python

  1. script = r.register_script(lua); script(keys=[k], args=[v]) # auto-falls back to EVAL

How to diagnose

  1. Cause — Restart/failover/flush?
  2. Client — Auto reload?
  3. Alternative — Functions?

🔧 Still not fixed?

Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:

Where this error sits

Origin: Data. Errors that are often confused with or caused by this one (click to open):

BullMQ: Missing lock for job / job stalled more than allowable limit — BullMQ: Error: Missing lock for job 42. moveToFinished / job stalled more than allowable limit (Redis)BullMQ: Missing lock …BUSY Redis is busy running a script — Redis: (error) BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE (Redis)BUSY Redis is busy ru…Celery with Redis: tasks run twice (visibility_timeout) — Celery: Task executed twice / Restoring unacked messages — Redis broker visibility_timeout shorter than task ETA (Redis)Celery with Redis: ta…Client output buffer limit reached (scheduled to be closed) — Redis: Client id=12 addr=10.0.0.5:51234 scheduled to be closed ASAP for overcoming of output buffer limits (Redis)Client output buffer …CLUSTERDOWN Hash slot not served — Redis Cluster: (error) CLUSTERDOWN Hash slot not served / The cluster is down (Redis)CLUSTERDOWN Hash slot…CROSSSLOT Keys in request don't hash to the same slot — Redis Cluster: (error) CROSSSLOT Keys in request don't hash to the same slot (Redis)CROSSSLOT Keys in req…ERR unknown command — Redis: (error) ERR unknown command 'JSON.GET', with args beginning with: / unknown command 'FT.SEARCH' (Redis)ERR unknown commandRedis::CannotConnectError (Sidekiq/Rails) — Redis::CannotConnectError: Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) (Ruby / Rails)Redis::CannotConnectE…NOSCRIPT …

Explore the map of this error Full error map →

🧠 Still stuck? Analyze your error

Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.

💬 What worked for others

No tips yet — did something else fix this for you?

Share what worked for you

Tips are checked by an editor before they appear. Links are removed.