module Redis::Commands::Hashes

Public Instance Methods

hdel(key, *fields) click to toggle source

Delete one or more hash fields.

@param [String] key @param [String, Array<String>] field @return [Integer] the number of fields that were removed from the hash

# File lib/redis/commands/hashes.rb, line 156
def hdel(key, *fields)
  fields.flatten!(1)
  send_command([:hdel, key].concat(fields))
end
hexists(key, field) click to toggle source

Determine if a hash field exists.

@param [String] key @param [String] field @return [Boolean] whether or not the field exists in the hash

# File lib/redis/commands/hashes.rb, line 166
def hexists(key, field)
  send_command([:hexists, key, field], &Boolify)
end
hget(key, field) click to toggle source

Get the value of a hash field.

@param [String] key @param [String] field @return [String]

# File lib/redis/commands/hashes.rb, line 74
def hget(key, field)
  send_command([:hget, key, field])
end
hgetall(key) click to toggle source

Get all the fields and values in a hash.

@param [String] key @return [Hash<String, String>]

# File lib/redis/commands/hashes.rb, line 210
def hgetall(key)
  send_command([:hgetall, key], &Hashify)
end
hincrby(key, field, increment) click to toggle source

Increment the integer value of a hash field by the given integer number.

@param [String] key @param [String] field @param [Integer] increment @return [Integer] value of the field after incrementing it

# File lib/redis/commands/hashes.rb, line 176
def hincrby(key, field, increment)
  send_command([:hincrby, key, field, Integer(increment)])
end
hincrbyfloat(key, field, increment) click to toggle source

Increment the numeric value of a hash field by the given float number.

@param [String] key @param [String] field @param [Float] increment @return [Float] value of the field after incrementing it

# File lib/redis/commands/hashes.rb, line 186
def hincrbyfloat(key, field, increment)
  send_command([:hincrbyfloat, key, field, Float(increment)], &Floatify)
end
hkeys(key) click to toggle source

Get all the fields in a hash.

@param [String] key @return [Array<String>]

# File lib/redis/commands/hashes.rb, line 194
def hkeys(key)
  send_command([:hkeys, key])
end
hlen(key) click to toggle source

Get the number of fields in a hash.

@param [String] key @return [Integer] number of fields in the hash

# File lib/redis/commands/hashes.rb, line 10
def hlen(key)
  send_command([:hlen, key])
end
hmget(key, *fields, &blk) click to toggle source

Get the values of all the given hash fields.

@example

redis.hmget("hash", "f1", "f2")
  # => ["v1", "v2"]

@param [String] key @param [Array<String>] fields array of fields @return [Array<String>] an array of values for the specified fields

@see mapped_hmget

# File lib/redis/commands/hashes.rb, line 89
def hmget(key, *fields, &blk)
  fields.flatten!(1)
  send_command([:hmget, key].concat(fields), &blk)
end
hmset(key, *attrs) click to toggle source

Set one or more hash values.

@example

redis.hmset("hash", "f1", "v1", "f2", "v2")
  # => "OK"

@param [String] key @param [Array<String>] attrs array of fields and values @return [String] ‘“OK”`

@see mapped_hmset

# File lib/redis/commands/hashes.rb, line 50
def hmset(key, *attrs)
  send_command([:hmset, key] + attrs)
end
hrandfield(key, count = nil, withvalues: false, with_values: withvalues) click to toggle source

Get one or more random fields from a hash.

@example Get one random field

redis.hrandfield("hash")
  # => "f1"

@example Get multiple random fields

redis.hrandfield("hash", 2)
  # => ["f1, "f2"]

@example Get multiple random fields with values

redis.hrandfield("hash", 2, with_values: true)
  # => [["f1", "s1"], ["f2", "s2"]]

@param [String] key @param [Integer] count @param [Hash] options

- `:with_values => true`: include values in output

@return [nil, String, Array<String>, Array<[String, Float]>]

- when `key` does not exist, `nil`
- when `count` is not specified, a field name
- when `count` is specified and `:with_values` is not specified, an array of field names
- when `:with_values` is specified, an array with `[field, value]` pairs
# File lib/redis/commands/hashes.rb, line 138
def hrandfield(key, count = nil, withvalues: false, with_values: withvalues)
  if with_values && count.nil?
    raise ArgumentError, "count argument must be specified"
  end

  args = [:hrandfield, key]
  args << count if count
  args << "WITHVALUES" if with_values

  parser = Pairify if with_values
  send_command(args, &parser)
end
hscan(key, cursor, **options) click to toggle source

Scan a hash

@example Retrieve the first batch of key/value pairs in a hash

redis.hscan("hash", 0)

@param [String, Integer] cursor the cursor of the iteration @param [Hash] options

- `:match => String`: only return keys matching the pattern
- `:count => Integer`: return count keys at most per iteration

@return [String, Array<[String, String]>] the next cursor and all found keys

# File lib/redis/commands/hashes.rb, line 225
def hscan(key, cursor, **options)
  _scan(:hscan, cursor, [key], **options) do |reply|
    [reply[0], reply[1].each_slice(2).to_a]
  end
end
hscan_each(key, **options, &block) click to toggle source

Scan a hash

@example Retrieve all of the key/value pairs in a hash

redis.hscan_each("hash").to_a
# => [["key70", "70"], ["key80", "80"]]

@param [Hash] options

- `:match => String`: only return keys matching the pattern
- `:count => Integer`: return count keys at most per iteration

@return [Enumerator] an enumerator for all found keys

# File lib/redis/commands/hashes.rb, line 242
def hscan_each(key, **options, &block)
  return to_enum(:hscan_each, key, **options) unless block_given?

  cursor = 0
  loop do
    cursor, values = hscan(key, cursor, **options)
    values.each(&block)
    break if cursor == "0"
  end
end
hset(key, *attrs) click to toggle source

Set one or more hash values.

@example

redis.hset("hash", "f1", "v1", "f2", "v2") # => 2
redis.hset("hash", { "f1" => "v1", "f2" => "v2" }) # => 2

@param [String] key @param [Array<String> | Hash<String, String>] attrs array or hash of fields and values @return [Integer] The number of fields that were added to the hash

# File lib/redis/commands/hashes.rb, line 23
def hset(key, *attrs)
  attrs = attrs.first.flatten if attrs.size == 1 && attrs.first.is_a?(Hash)

  send_command([:hset, key, *attrs])
end
hsetnx(key, field, value) click to toggle source

Set the value of a hash field, only if the field does not exist.

@param [String] key @param [String] field @param [String] value @return [Boolean] whether or not the field was added to the hash

# File lib/redis/commands/hashes.rb, line 35
def hsetnx(key, field, value)
  send_command([:hsetnx, key, field, value], &Boolify)
end
hvals(key) click to toggle source

Get all the values in a hash.

@param [String] key @return [Array<String>]

# File lib/redis/commands/hashes.rb, line 202
def hvals(key)
  send_command([:hvals, key])
end
mapped_hmget(key, *fields) click to toggle source

Get the values of all the given hash fields.

@example

redis.mapped_hmget("hash", "f1", "f2")
  # => { "f1" => "v1", "f2" => "v2" }

@param [String] key @param [Array<String>] fields array of fields @return [Hash] a hash mapping the specified fields to their values

@see hmget

# File lib/redis/commands/hashes.rb, line 105
def mapped_hmget(key, *fields)
  fields.flatten!(1)
  hmget(key, fields) do |reply|
    if reply.is_a?(Array)
      Hash[fields.zip(reply)]
    else
      reply
    end
  end
end
mapped_hmset(key, hash) click to toggle source

Set one or more hash values.

@example

redis.mapped_hmset("hash", { "f1" => "v1", "f2" => "v2" })
  # => "OK"

@param [String] key @param [Hash] hash a non-empty hash with fields mapping to values @return [String] ‘“OK”`

@see hmset

# File lib/redis/commands/hashes.rb, line 65
def mapped_hmset(key, hash)
  hmset(key, hash.flatten)
end