gc cache based on total cache size as well as object age

e.g. remove old objects when cache grows above a certain size.

also fix so objects are actually removed from memory as well as database :/
dont serialize Keep values

this is for example useful for bgtasks that was added to the queue but
never run because of a restart. This way they will just be triggered
again on the next start/use and we dont have to wait for the Keep time
to run out.