diff --git a/lib/any_cache/adapters/redis.rb b/lib/any_cache/adapters/redis.rb index 1eb4344..b7ee69b 100644 --- a/lib/any_cache/adapters/redis.rb +++ b/lib/any_cache/adapters/redis.rb @@ -33,6 +33,18 @@ def supported_driver?(driver) # @since 0.1.0 DEFAULT_INCR_DECR_AMOUNT = 1 + # @return [String] + # + # @api private + # @since 0.3.0 + DELETE_MATCHED_CURSOR = "0" + + # @return [Integer] + # + # @api private + # @since 0.3.0 + DELETE_MATCHED_BATCH_SIZE = 10 + # @since 0.1.0 def_delegators :driver, :get, @@ -48,23 +60,6 @@ def supported_driver?(driver) :mapped_mset, :scan - # @return [AnyCache::Adapters::Redis::DeleteMatchedHeavy] - attr_reader :delete_matched_heavy - - # @return [AnyCache::Adapters::Redis::DeleteMatchedSoftly] - attr_reader :delete_matched_softly - - # @param driver [Object] - # @return [void] - # - # @api private - # @since 0.3.0 - def initialize(driver) - super - @delete_matched_heavy = DeleteMatchedHeavy.new(self) - @delete_matched_softly = DeleteMatchedSoftly.new(self) - end - # @param key [String] # @param options [Hash] # @return [Object] @@ -156,9 +151,21 @@ def delete(key, **options) # @api private # @since 0.3.0 def delete_matched(pattern, **options) + cursor = DELETE_MATCHED_CURSOR + case pattern - when String then delete_matched_softly.call(pattern, **options) - when Regexp then delete_matched_heavy.call(pattern, **options) + when String + loop do + cursor, keys = adapter.scan(cursor, match: pattern, count: DELETE_MATCHED_BATCH_SIZE) + del(keys) + break if cursor == DELETE_MATCHED_CURSOR + end + when Regexp + loop do + cursor, keys = adapter.scan(cursor, count: DELETE_MATCHED_BATCH_SIZE) + del(keys.grep(pattern)) + break if cursor == DELETE_MATCHED_CURSOR + end end end diff --git a/lib/any_cache/adapters/redis/delete_matched_basic.rb b/lib/any_cache/adapters/redis/delete_matched_basic.rb deleted file mode 100644 index 7f5d9e5..0000000 --- a/lib/any_cache/adapters/redis/delete_matched_basic.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -class AnyCache::Adapters::Redis - class DeleteMatchedBasic - # @since 0.3.0 - extend Forwardable - - # @return [String] - # - # @api private - # @since 0.3.0 - CURSOR_LOOP_FLAG = "0" - - # @return [Integer] - # - # @api private - # @since 0.3.0 - BATCH_SIZE = 10 - - # @return [AnyCache::Adapters::Redis] - # - # @api private - # @since 0.3.0 - attr_reader :adapter - - # @param adapter [AnyCache::Adapters::Redis] - # @return [void] - # - # @api private - # @since 0.3.0 - def initiaalize(adapter) - @adapter = adapter - end - - # @!method delete_matched(pattern, **options) - # @param pattern [Object] - # @param options [Hash] - # @return [void] - end -end diff --git a/lib/any_cache/adapters/redis/delete_matched_heavy.rb b/lib/any_cache/adapters/redis/delete_matched_heavy.rb deleted file mode 100644 index eebd47a..0000000 --- a/lib/any_cache/adapters/redis/delete_matched_heavy.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -class AnyCache::Adapters::Redis - class DeleteMatchedHeavy < DeleteMatchedBasic - # @param pattern [Regexp] - # @param options [Hash] - # @return [void] - # - # @api private - # @since 0.3.0 - def delete_matched(pattern, **options) - cursor = CURSOR_LOOP_FLAG - - loop do - cursor, keys = adapter.scan(cursor, count: BATCH_SIZE) - adapter.del(keys.grep(pattern)) - break if cursor == CURSOR_LOOP_FLAG - end - end - end -end diff --git a/lib/any_cache/adapters/redis/delete_matched_softly.rb b/lib/any_cache/adapters/redis/delete_matched_softly.rb deleted file mode 100644 index 2d0e2fd..0000000 --- a/lib/any_cache/adapters/redis/delete_matched_softly.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -class AnyCache::Adapters::Redis - class DeleteMatchedSoftly < DeleteMatchedBasic - # @param pattern [String] - # @param options [Hash] - # @return [void] - # - # @api private - # @since 0.3.0 - def delete_matched(pattern, **options) - cursor = CURSOR_LOOP_FLAG - - loop do - cursor, keys = adapter.scan(cursor, match: pattern, count: BATCH_SIZE) - adapter.del(keys) - break if cursor == CURSOR_LOOP_FLAG - end - end - end -end