My implementation of a simple, thread-safe LRU with (optional) TTLs and constant time operations. There are many LRUs for Ruby available but I was unable to find one that matches all three requirements.
Install it via gem
:
gem install timed_lru
Or just bundle it with your project.
# Initialize with a max size (default: 100) and a TTL (default: none)
lru = TimedLRU.new max_size: 3, ttl: 5
# Add values
lru["a"] = "value 1"
lru["b"] = "value 2"
lru["c"] = "value 3"
lru.keys # => ["a", "b"]
# Wait a second
sleep(1)
# Add more values
lru["d"] = "value 4"
lru.keys # => ["b", "c", "d"]
# Sleep a little longer
sleep(4)
lru["c"] # => "value 3"
lru.keys # => ["c", "d"]