Cache not clearing on expiry
As you can see in the documentation:


  $expire: One of the following values:
  
  
  CACHE_PERMANENT: Indicates that the item should never be removed unless explicitly told to using cache_clear_all() with a cache ID.
  CACHE_TEMPORARY: Indicates that the item should be removed at the next general cache wipe.
  A Unix timestamp: Indicates that the item should be kept at least until the given time, after which it behaves like CACHE_TEMPORARY.
  


Please note - it's not "at most". It's "at least". So your code works just the way it is to be expected. If you want to force-expire it, use cache_clear_all( __FUNCTION__ , 'cache_block'), for example in hook_cron() or at the beginning of your code.

Also note that it looks like you are re-saving cache at each use. That's not an usual thing, saving data is CPU and HDD expensive. It costs more than not caching at all. So consider only setting cache if it was not found in the first place, and needs to be regenerated. If cache is already set, let it expire and don't set it again.