Class: TimedLRU

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
MonitorMixin
Defined in:
lib/timed_lru.rb

Defined Under Namespace

Modules: ThreadUnsafe Classes: Node

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ TimedLRU

Returns a new instance of TimedLRU.

Parameters:

  • opts (Hash) (defaults to: {})

    options

Options Hash (opts):

  • max_size (Integer)

    maximum allowed number of items, defaults to 100

  • thread_safe (Boolean)

    true by default, set to false if you are not using threads a really need that extra bit of performance

  • ttl (Integer)

    the TTL in seconds

Raises:

  • (ArgumentError)


31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/timed_lru.rb', line 31

def initialize(opts = {})
  super() # MonitorMixin

  @hash     = {}
  @max_size = Integer(opts[:max_size] || 100)
  @ttl      = Integer(opts[:ttl]) if opts[:ttl]

  raise ArgumentError, "Option :max_size must be > 0" unless max_size > 0
  raise ArgumentError, "Option :ttl must be > 0" unless ttl.nil? || ttl > 0

  extend ThreadUnsafe if opts[:thread_safe] == false
end

Instance Attribute Details

#max_sizeObject (readonly)



18
19
20
# File 'lib/timed_lru.rb', line 18

def max_size
  @max_size
end

#ttlObject (readonly)



21
22
23
# File 'lib/timed_lru.rb', line 21

def ttl
  @ttl
end

Instance Method Details

#delete(key) ⇒ Object, NilClass

Deletes by ‘key`

Parameters:

  • key (Object)

    the storage key

Returns:

  • (Object, NilClass)

    value the deleted value (or nil)



76
77
78
79
80
81
# File 'lib/timed_lru.rb', line 76

def delete(key)
  mon_synchronize do
    node = @hash[key]
    remove(node).value if node
  end
end

#fetch(key) ⇒ Object, NilClass Also known as: []

Retrieves a ‘value` by `key`

Parameters:

  • key (Object)

    the storage key

Returns:

  • (Object, NilClass)

    value the associated value (or nil)



62
63
64
65
66
67
68
69
70
# File 'lib/timed_lru.rb', line 62

def fetch(key)
  mon_synchronize do
    node = @hash[key]
    break unless node

    touch(node)
    node.value
  end
end

#store(key, value) ⇒ Object Also known as: []=

Stores a ‘value` by `key`

Parameters:

  • key (Object)

    the storage key

  • value (Object)

    the associated value

Returns:

  • (Object)

    the value



48
49
50
51
52
53
54
55
56
# File 'lib/timed_lru.rb', line 48

def store(key, value)
  mon_synchronize do
    node = (@hash[key] ||= Node.new(key))
    node.value      = value
    touch(node)
    compact!
    node.value
  end
end