Xamarin.Forms
Almacenamiento en caché
Buscar..
Almacenamiento en caché utilizando Akavache
Acerca de Akavache
Akavache es una biblioteca increíblemente útil que proporciona una funcionalidad de alcance para el almacenamiento en caché de sus datos. Akavache proporciona una interfaz de almacenamiento de valor clave y funciona en la parte superior de SQLite3. No necesita mantener su esquema sincronizado, ya que en realidad es una solución No-SQL que lo hace perfecto para la mayoría de las aplicaciones móviles, especialmente si necesita que su aplicación se actualice a menudo sin pérdida de datos.
Recomendaciones para Xamarin
Akavache es definitivamente la mejor biblioteca de almacenamiento en caché para la aplicación Xamarin si solo no necesita operar con datos fuertemente relativos, binarios o cantidades realmente grandes de datos. Usa Akavache en los siguientes casos:
- Necesita su aplicación para almacenar en caché los datos durante un período de tiempo determinado (puede configurar el tiempo de espera de caducidad para cada entidad que se está guardando;
- Quieres que tu aplicación funcione sin conexión;
- Es difícil determinar y congelar el esquema de sus datos. Por ejemplo, tienes listas que contienen diferentes objetos escritos;
- Es suficiente para que tenga un simple acceso de valor clave a los datos y no necesita hacer consultas complejas.
Akavache no es una "bala de plata" para el almacenamiento de datos, así que piense dos veces antes de usarlo en los siguientes casos:
- Sus entidades de datos tienen muchas relaciones entre sí;
- Realmente no necesitas tu aplicación para trabajar sin conexión;
- Tienes una gran cantidad de datos para guardar localmente;
- Necesita migrar sus datos de una versión a otra;
- Debe realizar consultas complejas típicas de SQL como agrupación, proyecciones, etc.
En realidad, puede migrar manualmente sus datos con solo leerlos y escribirlos con campos actualizados.
Ejemplo simple
La interacción con Akavache se realiza principalmente a través de un objeto llamado BlobCache
.
La mayoría de los métodos de Akavache devuelven observables reactivos, pero también puede esperarlos gracias a los métodos de extensión.
using System.Reactive.Linq; // IMPORTANT - this makes await work!
// Make sure you set the application name before doing any inserts or gets
BlobCache.ApplicationName = "AkavacheExperiment";
var myToaster = new Toaster();
await BlobCache.UserAccount.InsertObject("toaster", myToaster);
//
// ...later, in another part of town...
//
// Using async/await
var toaster = await BlobCache.UserAccount.GetObject<Toaster>("toaster");
// or without async/await
Toaster toaster;
BlobCache.UserAccount.GetObject<Toaster>("toaster")
.Subscribe(x => toaster = x, ex => Console.WriteLine("No Key!"));
Manejo de errores
Toaster toaster;
try {
toaster = await BlobCache.UserAccount.GetObjectAsync("toaster");
} catch (KeyNotFoundException ex) {
toaster = new Toaster();
}
// Or without async/await:
toaster = await BlobCache.UserAccount.GetObjectAsync<Toaster>("toaster")
.Catch(Observable.Return(new Toaster()));