particularly ttl is dangerous to use in a way someone might coerce it to zero, as zero means never cache.  This is why I've been partial to Optional for this.