def get_storage(store_type, data_type, name, args = {})
      full_name = "#{key}_#{name}"
      result = nil
      case store_type.to_sym
      when :redis
        result = get_redis_storage(data_type, full_name.to_s, args)
      when :local
        @_local_cache ||= {}
        unless @_local_cache[full_name.to_s]
          @_local_cache[full_name.to_s] = get_local_storage(data_type, full_name.to_s, args)
        end
        result = @_local_cache[full_name.to_s]
      else
        raise TypeError.new("Unsupported caching storage type encountered: #{store_type}")
      end
      unless full_name == "#{key}_registry_#{key}"
        registry[name.to_s] = data_type
      end
      result
    end
def get_storage(store_type, data_type, name, args = {})
      full_name = "#{key}_#{name}"
      result = nil
      case store_type.to_sym
      when :redis
        result = get_redis_storage(data_type, full_name.to_s, args)
      when :local
        @_local_cache ||= {}
        unless @_local_cache[full_name.to_s]
          @_local_cache[full_name.to_s] = get_local_storage(data_type, full_name.to_s, args)
        end
        result = @_local_cache[full_name.to_s]
      else
        raise TypeError.new("Unsupported caching storage type encountered: #{store_type}")
      end
      unless full_name == "#{key}_registry_#{key}"
        registry[name.to_s] = data_type
      end
      result
    end
Fetch item from storage

 @param store_type [Symbol]
 @param data_type [Symbol]
 @param name [Symbol] name of data
 @param args [Hash] options for underlying storage
 @return [Object]