Q:

how to update/insert/delete item in akavache list object? 

Should I use akavache as a primary local database in my xamarin forms application or a cache database on top of another sqlite database?  Because I cant find any example of how to update, insert, delete data in akavache object.  For example,
   CacheItems= await BlobCache. LocalMachine. GetOrFetchObject<List<Item>>("CacheItems",
                  async () => await getdatafromAzure(recursive)); 

I am getting items from azure and store in local machine and these items are editable / deleteable or user can add a new item.  How do I do it?  

A:

Anything saved to LocalMachine gets persisted physically to the device.  So on app or device restart it'll still be there (if the user hasn't removed the app or cleared the data that is)
As far as how to access/save there's lots of good samples here
https://github.com/akavache/Akavache 
Insert Object and Get Object are your basic access methods and then there's lots of extension methods like GetOrFetch, GetAndFetch, which are very useful
Here's a quick sample I haven't super tested to give one way to access stuff.  It'd probably be better to use some of the extension methods but I figure an example like this is conceptually useful. 
BlobCache. LocalMachine. GetObject<Tobject>(someKEy)
            .Catch((KeyNotFoundException ke) => Observable. Return<Tobject>(null))
            .SelectMany(result =>
            {
                //object doesn't exist in cache so create a new one
                if (result == null)
                    result = new Tobject();

                //apply whatever updates you are wanting to do
                //result. SomeField = "bob";

                //This will replace or insert data
                return BlobCache. LocalMachine. InsertObject(someKEy, result);

            })
            .Subscribe();

It's really all pretty boring stuff :-p Just get an object and store an object.  Under the hood Akavache does a lot of really cool optimizations and synchronizations around that boring stuff though allowing it to be boring for the rest of us
In most of my cases when I start up a VM I retrieve the object from the cache and then just store it as some property on the VM or inside some service class.  Then when any changes are made to the object I just insert it into the cache
BlobCache. LocalMachine. InsertObject(someKEy, result).Subscribe()

At that point I know now if the app closes down I'll have the latest version of that object right when user starts up app
The examples I gave are more the full Rx way of accessing... What you have in your original question works fine
        await BlobCache. LocalMachine. GetOrFetchObject<List<object>>("CacheItems",
              async () => await getdatafromAzure(recursive));

That will basically check the cache if it doesn't exist then it goes to Azure... 
LocalMachine stores to physical device, InMemory just stores to some internal dictionary that goes away once the app is unloaded from memory, and UserAccount works with NT remoting accounts. 