Class: SolidCache::Entry

Inherits:
Record
  • Object
show all
Defined in:
app/models/solid_cache/entry.rb

Constant Summary

Constants inherited from Record

Record::NULL_INSTRUMENTER

Class Method Summary collapse

Methods inherited from Record

disable_instrumentation, with_shard

Class Method Details

.clear_deleteObject



41
42
43
# File 'app/models/solid_cache/entry.rb', line 41

def clear_delete
  in_batches.delete_all
end

.clear_truncateObject



37
38
39
# File 'app/models/solid_cache/entry.rb', line 37

def clear_truncate
  connection.truncate(table_name)
end

.decrement(key, amount) ⇒ Object



55
56
57
# File 'app/models/solid_cache/entry.rb', line 55

def decrement(key, amount)
  increment(key, -amount)
end

.delete_by_key(key) ⇒ Object



26
27
28
# File 'app/models/solid_cache/entry.rb', line 26

def delete_by_key(key)
  delete_no_query_cache(:key, to_binary(key))
end

.delete_matched(matcher, batch_size:) ⇒ Object



30
31
32
33
34
35
# File 'app/models/solid_cache/entry.rb', line 30

def delete_matched(matcher, batch_size:)
  like_matcher = arel_table[:key].matches(matcher, nil, true)
  where(like_matcher).select(:id).find_in_batches(batch_size: batch_size) do |entries|
    delete_no_query_cache(:id, entries.map(&:id))
  end
end

.expire(count, max_age:, max_entries:) ⇒ Object



65
66
67
68
69
# File 'app/models/solid_cache/entry.rb', line 65

def expire(count, max_age:, max_entries:)
  if (ids = expiry_candidate_ids(count, max_age: max_age, max_entries: max_entries)).any?
    delete(ids)
  end
end

.id_rangeObject



59
60
61
62
63
# File 'app/models/solid_cache/entry.rb', line 59

def id_range
  uncached do
    pick(Arel.sql("max(id) - min(id) + 1")) || 0
  end
end

.increment(key, amount) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'app/models/solid_cache/entry.rb', line 45

def increment(key, amount)
  transaction do
    uncached do
      amount += lock.where(key: key).pick(:value).to_i
      write(key, amount)
      amount
    end
  end
end

.read(key) ⇒ Object



17
18
19
# File 'app/models/solid_cache/entry.rb', line 17

def read(key)
  select_all_no_query_cache(get_sql, to_binary(key)).first
end

.read_multi(keys) ⇒ Object



21
22
23
24
# File 'app/models/solid_cache/entry.rb', line 21

def read_multi(keys)
  serialized_keys = keys.map { |key| to_binary(key) }
  select_all_no_query_cache(get_all_sql(serialized_keys), serialized_keys).to_h
end

.write(key, value) ⇒ Object



9
10
11
# File 'app/models/solid_cache/entry.rb', line 9

def write(key, value)
  upsert_all_no_query_cache([ { key: key, value: value } ])
end

.write_multi(payloads) ⇒ Object



13
14
15
# File 'app/models/solid_cache/entry.rb', line 13

def write_multi(payloads)
  upsert_all_no_query_cache(payloads)
end