redis/redis-rb · error · TypeError

# must be an Integer in integer mode, got #

Error message

#{name} must be an Integer in integer mode, got #{value.class}

What it means

Error "#{name} must be an Integer in integer mode, got #{value.class}" thrown in redis/redis-rb.

Solutions

  1. Pass an Integer value for the named field when the command is in integer mode.
  2. Use float mode (by: / BYFLOAT semantics) if the value must be a Float, or coerce with to_i.

When it happens

Trigger: Thrown at lib/redis/commands/strings.rb:405 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of redis/redis-rb@2ba9010b91 (2026-08-23). Data as JSON: /api/errors/ae7c4fb46255e923. Report an issue: GitHub.

Appendix: source

Thrown at lib/redis/commands/strings.rb:405

      end

      # Get the length of the value stored in a key.
      #
      # @param [String] key
      # @return [Integer] the length of the value stored in the key, or 0
      #   if the key does not exist
      def strlen(key)
        send_command([:strlen, key])
      end

      private

      # INCREX bounds decide whether the increment is applied at all, so a
      # Float bound in integer mode must raise rather than silently truncate
      # (`Integer(2.9)` => 2) — mirroring how `by:` selects the mode strictly.
      def increx_bound(name, value, float_mode)
        return Float(value) if float_mode
        raise TypeError, "#{name} must be an Integer in integer mode, got #{value.class}" unless value.is_a?(Integer)

        value
      end
    end
  end
end

View on GitHub (pinned to 2ba9010b91)