I know am years late to this thread, but
Expiration Time = Creation Time + TTL made more sense instead of
Expiration Time = Last Update Time + TTL given how we also have Max Idle Seconds; which calculates Expiration Time from last read or write.
For anyone still looking for Creation Time behavior, may have to do the evictions (manually) by tracking and comparing against custom creationAtTime variable or rely on per-entry-stats-enabled creation at time and doing . I also see support for
Custom Eviction Policy but have not tried that yet. Not sure if it would fire without setting any ttl/idle seconds or max size