Redis
 sql >> Database >  >> NoSQL >> Redis

È un buon caso d'uso per Redis su un'API REST di ServiceStack?

Cosa pensare quando si progetta un'applicazione NoSQL Redis

1) Per sviluppare correttamente in Redis dovresti pensare di più a come strutturare le relazioni nel tuo programma C#, ad esempio con le classi di raccolta C#, piuttosto che a un modello relazionale inteso per un RDBMS. La mentalità migliore sarebbe quella di pensare di più all'archiviazione dei dati come un database di documenti piuttosto che alle tabelle RDBMS. Essenzialmente tutto viene blob in Redis tramite una chiave (indice), quindi devi solo capire quali sono le tue entità primarie (cioè le radici aggregate) che verrebbero mantenute nel proprio "spazio dei nomi delle chiavi" o se si tratta di un'entità non primaria, cioè semplicemente metadati che dovrebbero semplicemente essere mantenuti con la relativa entità padre.

Esempi di Redis come Data Store principale

Ecco un buon articolo che illustra la creazione di una semplice applicazione di blogging utilizzando Redis:

http://www.servicestack.net/docs/redis-client/designing-nosql-database

Puoi anche guardare il codice sorgente di RedisStackOverflow per un altro esempio del mondo reale usando Redis.

Fondamentalmente dovresti archiviare e recuperare gli articoli di ogni tipo separatamente.

var redisUsers = redis.As<User>();
var user = redisUsers.GetById(1);
var userIsWatching = redisUsers.GetRelatedEntities<Watching>(user.Id);

Il modo in cui memorizzi la relazione tra entità utilizza i set di Redis, ad esempio:puoi archiviare concettualmente la relazione Utenti/Osservatori con:

SET["ids:User>Watcher:{UserId}"] = [{watcherId1},{watcherId2},...]

Redis è senza schema e idempotente

La memorizzazione degli ID in set redis è idempotente, ad esempio puoi aggiungere watcherId1 allo stesso set più volte e ne avrà sempre una sola occorrenza. Questo è bello perché significa che non hai mai bisogno di controllare l'esistenza della relazione e puoi continuare ad aggiungere liberamente ID correlati come se non fossero mai esistiti.

Correlati:scrivere o leggere su una raccolta Redis (ad es. List) che non esiste equivale a scrivere su una raccolta vuota, ovvero una lista viene creata al volo quando si aggiunge un elemento a una lista mentre si accede a una non- l'elenco esistente restituirà semplicemente 0 risultati. Questa è una vittoria senza attriti e produttività poiché non devi definire i tuoi schemi in anticipo per usarli. Anche se dovrebbe essere necessario, Redis fornisce l'operazione EXISTS per determinare se esiste una chiave o un'operazione TYPE in modo da poterne determinare il tipo.

Crea i tuoi rapporti/indici sui tuoi scritti

Una cosa da ricordare è perché non ci sono indici impliciti in Redis, generalmente dovrai impostare i tuoi indici/relazioni necessari per leggere te stesso durante le tue scritture. Fondamentalmente devi pensare in anticipo a tutti i tuoi requisiti di query e assicurarti di impostare le relazioni necessarie al momento della scrittura. Il codice sorgente RedisStackOverflow sopra è un buon esempio che lo mostra.

Nota:il provider ServiceStack.Redis C# presume che tu abbia un campo univoco chiamato Id questa è la sua chiave primaria. Puoi configurarlo per utilizzare un campo diverso con ModelConfig.Id() mappatura di configurazione.

Redis Persistenza

2) Redis supporta 2 tipi di modalità di persistenza RDB pronte all'uso e Append Only File (AOF). RDB scrive istantanee di routine mentre Append Only File agisce come un diario delle transazioni che registra tutte le modifiche tra le istantanee:consiglio di aggiungerle entrambe finché non ti senti a tuo agio con ciò che ciascuna fa e ciò di cui la tua applicazione ha bisogno. Puoi leggere tutta la persistenza di Redis su http://redis.io/topics/persistence.

Nota Redis supporta anche la replica banale di cui puoi leggere di più su:http://redis.io/topics/replication

Redis ama la RAM

3) Poiché Redis opera prevalentemente in memoria, la risorsa più importante è che tu abbia abbastanza RAM per contenere l'intero set di dati in memoria + un buffer per quando esegue lo snapshot su disco. Redis è molto efficiente, quindi anche una piccola istanza AWS sarà in grado di gestire molto carico:quello che vuoi cercare è avere abbastanza RAM.

Visualizzare i tuoi dati con l'interfaccia utente di amministrazione Redis

Infine, se stai utilizzando il client Redis C# di ServiceStack, ti ​​consiglio di installare l'interfaccia utente di amministrazione Redis che fornisce una bella vista visiva delle tue entità. Puoi vederne una demo dal vivo su:http://servicestack.net/RedisAdminUI/AjaxClient/