Ho una lista redis che ho creato, la sto usando come una coda al momento che si inverte una volta ogni tanto. Il mio problema è che mi piacerebbe essere in grado di ottenere l'indice di un articolo su quella coda/lista per valore.Ottieni l'indice di un elemento in base al valore in un elenco redis
Esempio
Se ho una lista con i seguenti valori:
{"dan","eduardo","pedro"}
Gli indici sarebbero:
0 : "dan"
1 : "eduardo"
2 : "pedro"
Voglio essere in grado passando nel valore per ottenere l'indice di quel valore sulla mia lista.
Come "eduardo" e tornare '1'.
È possibile, se sì, come lo faresti?
Anche una cosa che dovrei dire è che sto eseguendo i comandi in coda alla mia lista, rimuovendo gli elementi dall'alto e aggiungendoli in fondo.
Attualmente sto usando node.js 0.6.6 e l'ultimo modulo redis con l'ultima versione redis 2.4.4.
Sono felice per una soluzione solo in redis-cli.
Inoltre non vi è alcun vincolo a parte, quindi deve essere possibile eseguirlo con solo redis, nessun processo esterno ecc. Tuttavia se si desidera utilizzare il comando EVAL con lua go for it.
Modifica
Inoltre penso che la mia risposta potrebbe essere sul set non ordinati code.
Questo è un esempio interessante dell'uso di Lua. Tuttavia, il costo è una copia completa della lista, più una ricerca lineare in Lua. Può essere applicato solo su piccoli elenchi. Per elenchi di grandi dimensioni, blocca il loop di Redis per diversi secondi e consuma troppa memoria. –
Dipende dall'applicazione se la soluzione fornita in questa risposta è una buona scelta. Dato dalla descrizione della domanda non ci sono indicazioni su quanto sia grande o piccola la coda. Per avere un sovraccarico di memoria inferiore, è necessario utilizzare un algoritmo di ricerca diverso e per fare ciò è necessario ordinare l'elenco in base al valore. Inoltre, penso che l'uso di zrank e set ordinati suona come una soluzione migliore se si tratta di un'operazione eseguita su un ampio elenco di elementi. –
La coda può contenere fino a 10000 elementi. e cambia le voci che vengono rimosse dalla coda e accodate ogni 200 millisecondi. – dmportella