sql >> Base de Datos >  >> NoSQL >> Redis

¿Es este un buen caso de uso para Redis en una API REST de ServiceStack?

Qué pensar al diseñar una aplicación NoSQL Redis

1) Para desarrollarse correctamente en Redis, debe pensar más en cómo estructuraría las relaciones en su programa C#, es decir, con las clases de colección de C# en lugar de un modelo relacional destinado a un RDBMS. La mejor mentalidad sería pensar más en el almacenamiento de datos como una base de datos de documentos en lugar de tablas RDBMS. Esencialmente, todo se borra en Redis a través de una clave (índice), por lo que solo necesita averiguar cuáles son sus entidades principales (es decir, raíces agregadas) que se mantendrían en su propio "espacio de nombres clave" o si es una entidad no principal, es decir, simplemente metadatos que deberían persistir con su entidad principal.

Ejemplos de Redis como almacén de datos principal

Aquí hay un buen artículo que explica cómo crear una aplicación de blog simple usando Redis:

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

También puede mirar el código fuente de RedisStackOverflow para ver otro ejemplo del mundo real usando Redis.

Básicamente, necesitaría almacenar y recuperar los artículos de cada tipo por separado.

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

La forma en que almacena la relación entre entidades está haciendo uso de los Conjuntos de Redis, por ejemplo:puede almacenar la relación Usuarios/Observadores conceptualmente con:

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

Redis es idempotente y sin esquema

El almacenamiento de ID en conjuntos de redis es idempotente, es decir, puede agregar watcherId1 al mismo conjunto varias veces y solo tendrá una aparición. Esto es bueno porque significa que nunca necesita verificar la existencia de la relación y puede seguir agregando identificaciones relacionadas como si nunca hubieran existido.

Relacionado:escribir o leer en una colección de Redis (por ejemplo, Lista) que no existe es lo mismo que escribir en una colección vacía, es decir, se crea una lista sobre la marcha cuando agrega un elemento a una lista mientras accede a una la lista existente simplemente devolverá 0 resultados. Esta es una ganancia de productividad y sin fricciones, ya que no tiene que definir sus esquemas por adelantado para poder usarlos. Aunque si necesita, Redis proporciona la operación EXISTS para determinar si existe una clave o una operación TYPE para que pueda determinar su tipo.

Cree sus relaciones/índices en sus escrituras

Una cosa que debe recordar es que debido a que no hay índices implícitos en Redis, generalmente necesitará configurar sus índices/relaciones necesarias para leerse a sí mismo durante sus escrituras. Básicamente, debe pensar en todos los requisitos de su consulta por adelantado y asegurarse de configurar las relaciones necesarias en el momento de la escritura. El código fuente de RedisStackOverflow anterior es un buen ejemplo que muestra esto.

Nota:el proveedor ServiceStack.Redis C# asume que tiene un campo único llamado Id esa es su clave principal. Puede configurarlo para usar un campo diferente con ModelConfig.Id() asignación de configuración.

Persistencia de Redis

2) Redis admite 2 tipos de modos de persistencia listos para usar RDB y Append Only File (AOF). RDB escribe instantáneas de rutina, mientras que Append Only File actúa como un diario de transacciones que registra todos los cambios entre las instantáneas. Recomiendo agregar ambos hasta que se sienta cómodo con lo que hace cada uno y lo que necesita su aplicación. Puede leer toda la persistencia de Redis en http://redis.io/topics/persistence.

Nota Redis también es compatible con la replicación trivial sobre la que puede obtener más información en:http://redis.io/topics/replication

A Redis le encanta la memoria RAM

3) Dado que Redis opera predominantemente en la memoria, el recurso más importante es que tiene suficiente RAM para almacenar todo su conjunto de datos en la memoria + un búfer para cuando se toman instantáneas en el disco. Redis es muy eficiente, por lo que incluso una pequeña instancia de AWS podrá manejar una gran cantidad de carga; lo que desea buscar es tener suficiente RAM.

Visualización de sus datos con la IU de administrador de Redis

Finalmente, si usa el cliente ServiceStack C# Redis, le recomiendo que instale la interfaz de usuario de administración de Redis, que proporciona una buena vista visual de sus entidades. Puede ver una demostración en vivo en:http://servicestack.net/RedisAdminUI/AjaxClient/