There is a common pattern that solves this problem quite well.
Use sorted sets, and use a timestamp as the score. It’s then trivial to delete items by score range, which could be done periodically, or only on every write, with reads always ignoring the out of range elements, by reading only a range of scores.
More here: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs