From 66152842e2dc3819ac231350e2403f6d52483c90 Mon Sep 17 00:00:00 2001 From: mikolajgrygiel Date: Mon, 8 Jan 2024 16:30:34 +0100 Subject: [PATCH] Delete multiple entries with one query --- app/models/solid_cache/entry.rb | 5 +++++ lib/solid_cache/store/api.rb | 2 +- lib/solid_cache/store/entries.rb | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/models/solid_cache/entry.rb b/app/models/solid_cache/entry.rb index fc395cb..e5766f0 100644 --- a/app/models/solid_cache/entry.rb +++ b/app/models/solid_cache/entry.rb @@ -34,6 +34,11 @@ def delete_matched(matcher, batch_size:) end end + def delete_multi(keys) + serialized_keys = keys.map { |key| to_binary(key) } + delete_no_query_cache(:key, serialized_keys) + end + def clear_truncate connection.truncate(table_name) end diff --git a/lib/solid_cache/store/api.rb b/lib/solid_cache/store/api.rb index 4eb5345..6e0d4a8 100644 --- a/lib/solid_cache/store/api.rb +++ b/lib/solid_cache/store/api.rb @@ -119,7 +119,7 @@ def delete_entry(key, **options) end def delete_multi_entries(entries, **options) - entries.count { |key| delete_entry(key, **options) } + entry_delete_multi(entries).compact.sum end def serialize_entry(entry, raw: false, **options) diff --git a/lib/solid_cache/store/entries.rb b/lib/solid_cache/store/entries.rb index 2a258f6..d9ca25d 100644 --- a/lib/solid_cache/store/entries.rb +++ b/lib/solid_cache/store/entries.rb @@ -78,6 +78,12 @@ def entry_delete(key) Entry.delete_by_key(key) end end + + def entry_delete_multi(entries) + writing_keys(entries, failsafe: :delete_multi_entries, failsafe_returning: false) do + Entry.delete_multi(entries) + end + end end end end