When there is a lot of keys with a ttl, the redis expire algorithm can take a while before really deleting keys.
Sometimes ttl will return -1 for an expired key but if you call expire command on this key, expire will actually succeed and bring the key back to life.
This issue has been noticed on redis 2.4.7.