In breve: Redis ERR value is not an integer or out of range compare quando un comando numerico trova una stringa non rappresentabile come intero base 10 oppure quando il risultato supererebbe il range signed 64-bit. Identifica database, comando e chiave; usa TYPE, GET e TTL in sola lettura; correggi il processo che scrive il valore prima di inizializzare o migrare la chiave.
Indice dei contenuti
Redis ERR value is not an integer: quando compare
INCR aumenta di uno il valore memorizzato in una chiave. Se la chiave non esiste, Redis la considera inizialmente uguale a zero. Se invece contiene una struttura non compatibile, una stringa come 12.5, 12px, uno spazio o un numero oltre i limiti, l’operazione non può essere eseguita.
Redis non possiede un tipo “integer” separato: gli interi sono valori stringa interpretati come numeri decimali durante i comandi numerici. Per questo TYPE contatore può restituire string sia per 42 sia per quarantadue; soltanto la lettura del valore e la conoscenza del producer distinguono i due casi.

Valore non numerico, tipo e overflow
| Stato della chiave | Comando | Risultato |
|---|---|---|
| Non esiste | INCR key | Crea il valore 1 |
Stringa "41" | INCR key | Restituisce 42 |
Stringa "41.0" | INCR key | Errore: non è un intero base 10 valido per INCR |
| Hash, lista o set | INCR key | Errore di tipo (WRONGTYPE) |
| Massimo signed 64-bit | INCR key | Errore out of range |
Il range va da −9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Un contatore vicino al limite segnala di solito un modello dati sbagliato, una mancata rotazione o un valore corrotto; non è prudente aggirarlo convertendo il campo in numero in virgola mobile senza valutarne precisione e semantica.
Identificare comando, database e chiave
- Copia l’errore completo e lo stack applicativo; individua
INCR,INCRBY,DECR,DECRBYo il comando equivalente del client. - Conferma endpoint Redis, database logico o cluster, prefisso applicativo e nome esatto della chiave.
- Annota data, ora, versione dell’applicazione e ultima modifica che può aver cambiato il formato.
- Verifica se più servizi condividono la chiave con convenzioni differenti.
- Non eseguire
MONITORsu un’istanza trafficata senza autorizzazione: può esporre dati e aggiungere carico.
Controlli read-only con TYPE, GET e TTL
SELECT 0
TYPE app:counter
GET app:counter
TTL app:counter
OBJECT ENCODING app:counterSostituisci database e chiave con quelli verificati. TYPE restituisce il tipo o none; esegui GET soltanto se il tipo è string. TTL mostra se la chiave scadrà, è persistente o non esiste. Salva valore e TTL prima di qualunque modifica; evita di includere dati sensibili in ticket o screenshot.
Se il valore è numerico ma l’errore continua, controlla caratteri invisibili, segno, formato prodotto dal client e incremento richiesto. INCRBY può superare il limite anche quando il valore corrente è valido.

Correggere il producer e il formato
Scrittori con formati diversi
Se un servizio usa la chiave come contatore e un altro vi salva JSON, timestamp con decimali o stringhe descrittive, separa i namespace e definisci un contratto. Il fix corretto è impedire la prossima scrittura incoerente, non soltanto riparare il valore attuale.
Inizializzazione sicura
Quando la chiave può essere ricreata, usa una procedura condizionale che non sovrascriva un valore scritto nel frattempo. SET ... NX, transazioni con WATCH o uno script Lua possono garantire atomicità, ma devono rispettare la logica dell’applicazione.
Migrazione del dato
Per una chiave persistente o critica, crea una nuova chiave con schema corretto, copia o trasforma il valore con controllo dei limiti, conserva il TTL appropriato e aggiorna i consumer. Mantieni un rollback finché tutti gli scrittori usano il nuovo formato.
Verificare concorrenza e TTL
- Ripeti
TYPE,GETeTTLdopo la correzione. - Esegui il comando applicativo in staging o su una chiave di test.
- Controlla che più worker incrementino atomicamente senza leggere e riscrivere il valore lato client.
- Verifica che il TTL non sia stato perso da una sostituzione non prevista.
- Monitora l’assenza dell’errore e la crescita del contatore nella finestra operativa reale.
Errori da evitare
- Attribuire l’errore a replica, memoria o ACL senza leggere valore e comando.
- Eseguire
DELsu una chiave sconosciuta per far sparire il messaggio. - Usare
KEYS *in produzione per cercare il nome. - Convertire un contatore in float quando serve precisione intera.
- Sovrascrivere la chiave senza preservare TTL e senza considerare writer concorrenti.
- Condividere dump Redis, password o stringhe di connessione in un ticket.
Guide Xlogic correlate
Domande frequenti
Quali comandi generano ERR value is not an integer?
Tipicamente comandi numerici come INCR, INCRBY, DECR o DECRBY quando il valore non rappresenta un intero valido o l’operazione supera il range ammesso.
TYPE string significa che il valore è sicuramente numerico?
No. Redis conserva gli interi come valori stringa interpretati numericamente; TYPE conferma la struttura, mentre GET serve a vedere se il contenuto è un intero base 10 valido.
Qual è il range ammesso da INCR?
Redis limita l’operazione agli interi con segno a 64 bit, quindi da −9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.
Posso cancellare la chiave per risolvere?
Solo se l’applicazione può ricrearla senza perdita o incoerenza. Prima identifica il producer, conserva valore e TTL e valuta concorrenza, lock e dipendenze.
Conclusione
Questo errore non richiede una diagnosi generica dell’intero server Redis. Il percorso minimo è chiave, tipo, valore, limite e producer. Correggere il contratto del dato e applicare una migrazione atomica evita che una cancellazione temporanea venga subito annullata dal processo che scrive il formato sbagliato.