The order of search image in Picasso is:
Memory cache -> Disk cache -> Network
So there are few scenario we need to invalidate cache in Picasso:
1.Invalidate memory cache: 
- Usercase: When image already update in disk cache or remote host
- Solution: Clear cache of Url, File, Uri if exist - mPicasso.with(appContext).invalidate(File);
mPicasso.with(appContext).invalidate(Url);
mPicasso.with(appContext).invalidate(Uri);
 
.
2.Invalidate memory cache and disk cache Online
※note: Online mean update directly to ImageView
- User case: Image updated on remote host  
- Solution: Abort image on memory cache and disk cache then request image on remote host - mPicasso.with(appContext)
    .load(url)
    .memoryPolicy(MemoryPolicy.NO_CACHE )
    .networkPolicy(NetworkPolicy.NO_CACHE)
    .into(imageView);
 - -> Abort memory cache and disk cache 
.
3.Invalidate memory cache and disk cache Offline
※ note: Offline mean update not update to ImageView, just background fetch to using later
※Note: Using fetch() is good but it also consume network resource, so please consider carefully, check scenario 4 in below for better solution
4.Invalidate memory cache and disk cache Offline if disk cache is exist
- User case: Only invalidate cache if already exist in disk cache
- Solution: Should check disk by using parameter: NetworkPolicy.OFFLINE cache before fetch -  mPicasso.with(appContext)
    .load(url)
    .memoryPolicy(MemoryPolicy.NO_CACHE)
    .networkPolicy(NetworkPolicy.OFFLINE)
    .fetch(new Callback() {
        @Override
        public void onSuccess() {
            //Success: mean disk cache exist -> should do actual fetch
            picasso.load(url).fetch();
        }
        @Override
        public void onError() {
        //Failed: mean disk cache not exist
    }
});
 
Picasso is an amazing libs, I hope squareup will add more convenience API to manage cache in upcoming future.