Поиск…


Кэширование с использованием Akavache

О компании Akavache

Akavache - невероятно полезная библиотека, обеспечивающая функциональность кэширования ваших данных. Akavache обеспечивает интерфейс хранения ключевого значения и работает на вершине SQLite3. Вам не нужно синхронизировать вашу схему, поскольку это фактически не-SQL-решение, которое делает его идеальным для большинства мобильных приложений, особенно если вам нужно, чтобы ваше приложение обновлялось часто без потери данных.

Рекомендации для Xamarin

Akavache определенно является лучшей библиотекой кэширования для приложения Xamarin, если вам не нужно работать с сильно относительными данными, бинарными или действительно большими объемами данных. Используйте Akavache в следующих случаях:

  • Вам необходимо, чтобы ваше приложение кэшировало данные за определенный период времени (вы можете настроить тайм-аут истечения срока действия для каждого сохраняемого объекта;
  • Вы хотите, чтобы ваше приложение работало в автономном режиме;
  • Трудно определить и заморозить схему ваших данных. Например, у вас есть списки, содержащие разные типизированные объекты;
  • Достаточно для вас иметь простой доступ к данным с ключом и вам не нужно создавать сложные запросы.

Akavache не является «серебряной пулей» для хранения данных, поэтому дважды подумайте об использовании в следующих случаях:

  • У ваших объектов данных много отношений между собой;
  • Вам не нужно, чтобы ваше приложение работало в автономном режиме;
  • У вас есть огромное количество данных для локального сохранения;
  • Вам необходимо перенести данные с версии на версию;
  • Вам необходимо выполнить сложные запросы, типичные для SQL, такие как группировка, прогнозы и т. Д.

Фактически вы можете вручную перенести свои данные, просто прочитав их и обновив с помощью обновленных полей.

Простой пример

Взаимодействие с Akavache осуществляется в основном с помощью объекта BlobCache .

Большинство методов Akavache возвращают реактивные наблюдаемые, но вы также можете просто ждать их благодаря методам расширения.

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!"));

Обработка ошибок

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()));


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow