Erhan Ballıeker

Resilient Network Services – Bölüm 5 – Akavache – 2

Selamlar,

Bir önceki yazımda akavache den bahsetmiş, ne olduğundan, ne faydası olduğundan ve bazı özelliklerinden bahsetmiştim. Bu yazımda bunun devamı olarak ne şekilde kullanabileceğimize, yardımcı metodlarına değineceğim.

Tüm Akavache BlobCache leri aşağıdaki temel metodları destekliyor.

/*
 * Store dan dataları almak..
 */

// tek bir data almak için.
IObservable<byte[]> Get(string key);

// dataların bir koleksiyonunu almak için.
IObservable<IDictionary<string, byte[]>> Get(IEnumerable<string> keys);

// eklediğiniz tipten Deserialize edilmiş tek bir datayı almak için.
IObservable<T> GetObject<T>(string key);

// aynı tipteki Deserialize edilmiş dataların bir koleksiyonunu almak için
IObservable<IEnumerable<T>> GetAllObjects<T>();

// verilen key listesine karşılık gelen birden çok Deserialize edilmiş datayı almak için.
IObservable<IDictionary<string, T>> GetObjects<T>(IEnumerable<string> keys);

/*
 * Store a kayıt eklemek.
 */

// Tek bir data eklemek için
IObservable<Unit> Insert(string key, byte[] data, DateTimeOffset? absoluteExpiration = null);

// bir kolejsiyon eklemek için
IObservable<Unit> Insert(IDictionary<string, byte[]> keyValuePairs, DateTimeOffset? absoluteExpiration = null);

// Otomatik olarak Serialize edilecek bir kompleks objenizi saklamak için.
IObservable<Unit> InsertObject<T>(string key, T value, DateTimeOffset? absoluteExpiration = null);

// Aynı tipteki kompleks objelerinizi saklamanız için.
IObservable<Unit> InsertObjects<T>(IDictionary<string, T> keyValuePairs, DateTimeOffset? absoluteExpiration = null);

/*
 * Store data silmek için.
 */

// tek bir data silmek için
IObservable<Unit> Invalidate(string key);

// belli bir liste silmek için
IObservable<Unit> Invalidate(IEnumerable<string> keys);

// Eğer InserObject ile insert ettiğiniz datalar var ise, aynı şekilde InvalideObject metodu ile silmeniz gerekiyor. 
IObservable<Unit> InvalidateObject<T>(string key);

// aynı şekilde InsertObject edilmiş dataların silinmesi için, tek farkı birden çok datayı silmeniz için bu metod
IObservable<Unit> InvalidateObjects<T>(IEnumerable<string> keys);

// Object olarak kayıt edilmiş olup olmamasına bakılmaksızın tüm dataların silinmesi için
IObservable<Unit> InvalidateAll();

// Belli bir T tipindeki dataların silinmesi için.
IObservable<Unit> InvalidateAllObjects<T>();

/*
 * Saklanan datalar ile ilgili metadata bilgilerini almak için
 */

// eklenen tüm keyleri dönen metod.
IObservable<IEnumerable<string>> GetAllKeys();

// bu key ile saklanmış datanın eklenme tarihini dönen metod.
IObservable<DateTimeOffset?> GetCreatedAt(string key);

// T tipindeki bir objenin eklendiği tarihi dönen metod.
IObservable<DateTimeOffset?> GetObjectCreatedAt<T>(string key);

// verilen key lerin oluşturulma tarihlerinin listesini dönen metod.
IObservable<IDictionary<string, DateTimeOffset?>> GetCreatedAt(IEnumerable<string> keys);

/*
 * Utility metodları
 */

// tüm tamamlanmamış operasyonların diske yazıldığından emin olmak için.
IObservable<Unit> Flush();

// tüm expire olmuş key ve value larını db den silmek için.
IObservable<Unit> Vacuum();

Yukarıdaki tüm metodlar tüm BLobCache tipleri için kullanılabilir. Ama bunlardan daha da kolay olarak işleri çözmemizi sağlayan extension metodlar muhtemelen daha çok tercih edicekleriniz arasında olacaklar.

Bu metodlar aşağıdaki gibi.

/*
 * Username / Login Metodları (Sadece ISecureBlobCache için)
 */

// Verilen host için login bilgilerini saklamak.
IObservable<Unit> SaveLogin(string user, string password, string host = "default", DateTimeOffset? absoluteExpiration = null);

// verilen host taki login bilgilerini okumak.
IObservable<LoginInfo> GetLoginAsync(string host = "default");

// verilen host taki bilgileri uçurmak
IObservable<Unit> EraseLogin(string host = "default");

/*
 * url ve imajların download edilip cachelenmesi
 */

// byte arra olarak download etmek
IObservable<byte[]> DownloadUrl(string url,
    IDictionary<string, string> headers = null,
    bool fetchAlways = false,
    DateTimeOffset? absoluteExpiration = null);

// download edilen datayı imaj olarak okumak.
IObservable<IBitmap> LoadImage(string key, float? desiredWidth = null, float? desiredHeight = null);

// Imajı download edip sonrasında imaj olarak geriye dönmek için.
IObservable<IBitmap> LoadImageFromUrl(string url,
    bool fetchAlways = false,
    float? desiredWidth = null,
    float? desiredHeight = null,
    DateTimeOffset? absoluteExpiration = null);

/*
 * Birleşik işlemler
 */

//Cache deki datayı okumaya çalışır, eğer key i bulamaz ise veya okurken hata
//alırsa verdiğini func ı çalıştırır aldığı sonucu aynı key ile cache e atar.
IObservable<T> GetOrFetchObject<T>(string key, Func<Task<T>> fetchFunc, DateTimeOffset? absoluteExpiration = null);

// GetOrFetchObject gibi sadece async değil.
IObservable<T> GetOrCreateObject<T>(string key, Func<T> fetchFunc, DateTimeOffset? absoluteExpiration = null);

//GetOrFetchObject gibi ama fark olarak verilen key i db de bulsa bile, o sonucu
//hemen döner fakat yine de verdiğiniz func ı çalıştırıp cache deki datayı update eder.
IObservable<T> GetAndFetchLatest<T>(this IBlobCache This,
    string key,
    Func<IObservable<T>> fetchFunc,
    Func<DateTimeOffset, bool> fetchPredicate = null,
    DateTimeOffset? absoluteExpiration = null,
    bool shouldInvalidateOnError = false,
    Func<T, bool> cacheValidationPredicate = null)

Bu iki yazımıda okumuş olsanız dahi akavache github reposunu incelemenizi ve Paul Betts in xamarin evolve 2016 da yaptığı konuşmayı izlemenizi öneririm.

Bir sonraki yazımda görüşmek üzere.

 

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: