Akavache是一个非常有用的库,提供了缓存数据的覆盖范围功能。Akavache提供了一个键值存储接口,并且可以在SQLite3的顶部使用。您实际上不需要使用架构同步,因为它实际上是No-SQL解决方案,它非常适合大多数移动应用程序,尤其是当您需要经常更新应用程序而又不会丢失数据时。
如果您不需要使用高度相关的数据,二进制数据或非常大量的数据,则Akavache绝对是Xamarin应用程序的最佳缓存库。在以下情况下,请使用Akavache:
您需要您的应用在给定的时间段内缓存数据(您可以为每个要保存的实体配置过期超时;
您希望您的应用程序可以脱机工作;
很难确定和冻结数据的架构。例如,您有包含不同类型对象的列表。
对数据进行简单的键值访问就足够了,而无需进行复杂的查询。
Akavache并不是数据存储的“灵丹妙药”,因此在以下情况下,请三思而后行:
您的数据实体之间有很多关系。
您实际上并不需要离线运行应用程序;
您有大量数据要保存在本地;
您需要将数据从一个版本迁移到另一个版本。
您需要执行典型的SQL复杂查询,例如分组,投影等。
实际上,您可以通过使用更新的字段进行读写来手动迁移数据。
与Akavache的互动主要是通过称为的对象完成的BlobCache。
Akavache的大多数方法都返回反应式可观测值,但是由于扩展方法,您也可以等待它们。
using System.Reactive.Linq; // 重要提示-这使等待工作! // 在进行任何插入或获取操作之前,请确保设置了应用程序名称 BlobCache.ApplicationName = "AkavacheExperiment"; var myToaster = new Toaster(); await BlobCache.UserAccount.InsertObject("toaster", myToaster); // // 后来在城镇的另一部分 // // 使用异步/等待 var toaster = await BlobCache.UserAccount.GetObject<Toaster>("toaster"); // 或没有异步/等待 Toaster toaster; BlobCache.UserAccount.GetObject<Toaster>("toaster") .Subscribe(x => toaster = x, ex => Console.WriteLine("没有钥匙!"));
Toaster toaster; try { toaster = await BlobCache.UserAccount.GetObjectAsync("toaster"); } catch (KeyNotFoundException ex) { toaster = new Toaster(); } // 或没有异步/等待: toaster = await BlobCache.UserAccount.GetObjectAsync<Toaster>("toaster") .Catch(Observable.Return(new Toaster()));