Class: Magick::Adapters::Redis
- Defined in:
- lib/magick/adapters/redis.rb
Instance Method Summary collapse
- #all_features ⇒ Object
-
#client ⇒ Object
Public accessor for the underlying Redis client.
- #delete(feature_name) ⇒ Object
- #exists?(feature_name) ⇒ Boolean
- #get(feature_name, key) ⇒ Object
- #get_all_data(feature_name) ⇒ Object
-
#initialize(redis_client = nil) ⇒ Redis
constructor
A new instance of Redis.
- #load_all_features_data ⇒ Object
- #set(feature_name, key, value) ⇒ Object
- #set_all_data(feature_name, data_hash) ⇒ Object
Constructor Details
#initialize(redis_client = nil) ⇒ Redis
Returns a new instance of Redis.
8 9 10 11 12 13 14 |
# File 'lib/magick/adapters/redis.rb', line 8 def initialize(redis_client = nil) @redis = redis_client || default_redis_client @namespace = 'magick:features' raise AdapterError, 'Redis client is required' unless @redis rescue StandardError => e raise AdapterError, "Failed to initialize Redis adapter: #{e.}" end |
Instance Method Details
#all_features ⇒ Object
41 42 43 44 45 46 |
# File 'lib/magick/adapters/redis.rb', line 41 def all_features keys = scan_keys keys.map { |key| key.sub("#{namespace}:", '') } rescue StandardError => e raise AdapterError, "Failed to get all features from Redis: #{e.}" end |
#client ⇒ Object
Public accessor for the underlying Redis client
98 99 100 |
# File 'lib/magick/adapters/redis.rb', line 98 def client @redis end |
#delete(feature_name) ⇒ Object
29 30 31 32 33 |
# File 'lib/magick/adapters/redis.rb', line 29 def delete(feature_name) redis.del(key_for(feature_name)) rescue StandardError => e raise AdapterError, "Failed to delete from Redis: #{e.}" end |
#exists?(feature_name) ⇒ Boolean
35 36 37 38 39 |
# File 'lib/magick/adapters/redis.rb', line 35 def exists?(feature_name) redis.exists?(key_for(feature_name)) rescue StandardError => e raise AdapterError, "Failed to check existence in Redis: #{e.}" end |
#get(feature_name, key) ⇒ Object
16 17 18 19 20 21 |
# File 'lib/magick/adapters/redis.rb', line 16 def get(feature_name, key) value = redis.hget(key_for(feature_name), key.to_s) deserialize_value(value) rescue StandardError => e raise AdapterError, "Failed to get from Redis: #{e.}" end |
#get_all_data(feature_name) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/magick/adapters/redis.rb', line 48 def get_all_data(feature_name) raw = redis.hgetall(key_for(feature_name)) return {} if raw.nil? || raw.empty? raw.each_with_object({}) do |(k, v), result| result[k.to_s] = deserialize_value(v) end rescue StandardError => e raise AdapterError, "Failed to get all data from Redis: #{e.}" end |
#load_all_features_data ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/magick/adapters/redis.rb', line 59 def load_all_features_data keys = scan_keys return {} if keys.empty? # Pipeline all HGETALL calls to avoid N+1 round-trips raw_results = redis.pipelined do |pipeline| keys.each { |key| pipeline.hgetall(key) } end result = {} keys.each_with_index do |key, idx| feature_name = key.sub("#{namespace}:", '') raw = raw_results[idx] next if raw.nil? || raw.empty? feature_data = {} raw.each do |k, v| feature_data[k.to_s] = deserialize_value(v) end result[feature_name] = feature_data end result rescue StandardError => e raise AdapterError, "Failed to load all features from Redis: #{e.}" end |
#set(feature_name, key, value) ⇒ Object
23 24 25 26 27 |
# File 'lib/magick/adapters/redis.rb', line 23 def set(feature_name, key, value) redis.hset(key_for(feature_name), key.to_s, serialize_value(value)) rescue StandardError => e raise AdapterError, "Failed to set in Redis: #{e.}" end |
#set_all_data(feature_name, data_hash) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/magick/adapters/redis.rb', line 85 def set_all_data(feature_name, data_hash) return if data_hash.nil? || data_hash.empty? serialized = {} data_hash.each do |key, value| serialized[key.to_s] = serialize_value(value) end redis.mapped_hmset(key_for(feature_name), serialized) rescue StandardError => e raise AdapterError, "Failed to set all data in Redis: #{e.}" end |