2016-01-12 9 views
7

ho scritto Lua che sto considerando la migrazione a grappolo Redisdovrei specificare nomi chiave pieno quando si utilizza Lua in Redis grappolo

Devo specificare nomi chiave pieno quando la chiamata http://redis.io/commands/eval? Oppure posso scappare solo specificando hashtag?

Per esempio desidero passare solo {UNIQUE_HASH_TAG} invece di {} UNIQUE_HASH_TAG/key1, {} UNIQUE_HASH_TAG/key2 ... etc

Ho un sacco di chiavi, e la logica è piuttosto complicato - a volte mi finiscono per generare dinamicamente nomi di chiavi ma entro lo lo stesso tag hash.

Devo violare alcune specifiche passando solo tag hash invece di nomi di chiavi?

risposta

3

Devo specificare nomi chiave pieni

Questa è la pratica raccomandata.

dovrei aver violato alcune specifiche

No, le specifiche non indicano che i nomi chiave devono essere esplicitamente passato. Il meccanismo /ARGV è stato messo in atto in preparazione per il cluster, ma prima che il cluster fosse effettivamente diventato. A quel tempo, i tag hash non facevano parte del design del cluster, quindi la raccomandazione doveva evitare di codificare/generare dinamicamente i nomi delle chiavi negli script in quanto non vi è alcuna garanzia che si trovino nello stesso slot di hash del cluster.

Il tuo approccio è perfettamente valido e funzionerebbe come previsto. Voglio sottolineare che questo ha senso solo se gestisci molti dei cosiddetti {UNIQUE_HASH_TAG} s, altrimenti dovrai colpire solo alcuni slot che potrebbero diventare una sfida di scalabilità.

EDIT: Tutto ciò che ha detto, è in realtà dovrebbe sempre passare esplicitamente i nomi chiave per lo script piuttosto che ingannare. Anche se questo non è attualmente bloccato, questo comportamento non specificato potrebbe cambiare in futuro e causare la rottura del tuo codice.

+0

Ciò renderebbe la mia migrazione totalmente impossibile, sfortunatamente non posso evitare di creare chiavi al volo (se avessimo avuto tipi di dati annidati, come set all'interno del set, questo non sarebbe stato necessario), ma quando lo faccio ho sempre fallo all'interno dell'hashtag ... – let4be

+1

Per il mio compito ho bisogno solo di alcune funzionalità del cluster redis, ad esempio la possibilità di riequilibrare i miei dati tra i nodi. In alternativa, sto considerando di implementarlo manualmente tramite il comando Lua + 'Move' (contrassegnare il data set come non disponibile, serializzare il set di dati all'interno di una singola chiave, spostarsi atomicamente su un'altra istanza, deserializzare, contrassegnare come disponibile in una nuova istanza, rimuovere l'originale set di dati) - ma sembra reinventare la ruota – let4be