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



39
40
41
# File 'app/models/solid_cache/entry.rb', line 39

def clear_delete
  in_batches.delete_all
end

.clear_truncateObject



35
36
37
# File 'app/models/solid_cache/entry.rb', line 35

def clear_truncate
  connection.truncate(table_name)
end

.decrement(key, amount) ⇒ Object



53
54
55
# File 'app/models/solid_cache/entry.rb', line 53

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

.delete_by_key(key) ⇒ Object



24
25
26
# File 'app/models/solid_cache/entry.rb', line 24

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

.delete_matched(matcher, batch_size:) ⇒ Object



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

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



63
64
65
66
67
# File 'app/models/solid_cache/entry.rb', line 63

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



57
58
59
60
61
# File 'app/models/solid_cache/entry.rb', line 57

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

.increment(key, amount) ⇒ Object



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

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



15
16
17
# File 'app/models/solid_cache/entry.rb', line 15

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

.read_multi(keys) ⇒ Object



19
20
21
22
# File 'app/models/solid_cache/entry.rb', line 19

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



7
8
9
# File 'app/models/solid_cache/entry.rb', line 7

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

.write_multi(payloads) ⇒ Object



11
12
13
# File 'app/models/solid_cache/entry.rb', line 11

def write_multi(payloads)
  upsert_all_no_query_cache(payloads)
end