Class: ThreadSafe::NonConcurrentCacheBackend

Inherits:
Object
  • Object
show all
Defined in:
lib/thread_safe/non_concurrent_cache_backend.rb

Direct Known Subclasses

MriCacheBackend, SynchronizedCacheBackend

Instance Method Summary (collapse)

Constructor Details

- (NonConcurrentCacheBackend) initialize(options = nil)

WARNING: all public methods of the class must operate on the @backend directly without calling each other. This is important because of the SynchronizedCacheBackend which uses a non-reentrant mutex for perfomance reasons.



7
8
9
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 7

def initialize(options = nil)
  @backend = {}
end

Instance Method Details

- (Object) [](key) Also known as: _get



11
12
13
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 11

def [](key)
  @backend[key]
end

- (Object) []=(key, value) Also known as: _set



15
16
17
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 15

def []=(key, value)
  @backend[key] = value
end

- (Object) clear



88
89
90
91
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 88

def clear
  @backend.clear
  self
end

- (Object) compute(key)



49
50
51
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 49

def compute(key)
  store_computed_value(key, yield(@backend[key]))
end

- (Object) compute_if_absent(key)



19
20
21
22
23
24
25
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 19

def compute_if_absent(key)
  if NULL != (stored_value = @backend.fetch(key, NULL))
    stored_value
  else
    @backend[key] = yield
  end
end

- (Object) compute_if_present(key)



43
44
45
46
47
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 43

def compute_if_present(key)
  if NULL != (stored_value = @backend.fetch(key, NULL))
    store_computed_value(key, yield(stored_value))
  end
end

- (Object) delete(key)



75
76
77
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 75

def delete(key)
  @backend.delete(key)
end

- (Object) delete_pair(key, value)



79
80
81
82
83
84
85
86
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 79

def delete_pair(key, value)
  if pair?(key, value)
    @backend.delete(key)
    true
  else
    false
  end
end

- (Object) each_pair



93
94
95
96
97
98
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 93

def each_pair
  dupped_backend.each_pair do |k, v|
    yield k, v
  end
  self
end

- (Object) get_and_set(key, value)



61
62
63
64
65
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 61

def get_and_set(key, value)
  stored_value = @backend[key]
  @backend[key] = value
  stored_value
end

- (Object) get_or_default(key, default_value)



104
105
106
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 104

def get_or_default(key, default_value)
  @backend.fetch(key, default_value)
end

- (Boolean) key?(key)

Returns:

  • (Boolean)


67
68
69
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 67

def key?(key)
  @backend.key?(key)
end

- (Object) merge_pair(key, value)



53
54
55
56
57
58
59
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 53

def merge_pair(key, value)
  if NULL == (stored_value = @backend.fetch(key, NULL))
    @backend[key] = value
  else
    store_computed_value(key, yield(stored_value))
  end
end

- (Object) replace_if_exists(key, new_value)



36
37
38
39
40
41
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 36

def replace_if_exists(key, new_value)
  if NULL != (stored_value = @backend.fetch(key, NULL))
    @backend[key] = new_value
    stored_value
  end
end

- (Object) replace_pair(key, old_value, new_value)



27
28
29
30
31
32
33
34
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 27

def replace_pair(key, old_value, new_value)
  if pair?(key, old_value)
    @backend[key] = new_value
    true
  else
    false
  end
end

- (Object) size



100
101
102
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 100

def size
  @backend.size
end

- (Boolean) value?(value)

Returns:

  • (Boolean)


71
72
73
# File 'lib/thread_safe/non_concurrent_cache_backend.rb', line 71

def value?(value)
  @backend.value?(value)
end