module Redis::Commands::Sets

Public Instance Methods

sadd(key, *members) click to toggle source

Add one or more members to a set.

@param [String] key @param [String, Array<String>] member one member, or array of members @return [Integer] The number of members that were successfully added

# File lib/redis/commands/sets.rb, line 19
def sadd(key, *members)
  members.flatten!(1)
  send_command([:sadd, key].concat(members))
end
sadd?(key, *members) click to toggle source

Add one or more members to a set.

@param [String] key @param [String, Array<String>] member one member, or array of members @return [Boolean] Wether at least one member was successfully added.

# File lib/redis/commands/sets.rb, line 29
def sadd?(key, *members)
  members.flatten!(1)
  send_command([:sadd, key].concat(members), &Boolify)
end
scard(key) click to toggle source

Get the number of members in a set.

@param [String] key @return [Integer]

# File lib/redis/commands/sets.rb, line 10
def scard(key)
  send_command([:scard, key])
end
sdiff(*keys) click to toggle source

Subtract multiple sets.

@param [String, Array<String>] keys keys pointing to sets to subtract @return [Array<String>] members in the difference

# File lib/redis/commands/sets.rb, line 123
def sdiff(*keys)
  keys.flatten!(1)
  send_command([:sdiff].concat(keys))
end
sdiffstore(destination, *keys) click to toggle source

Subtract multiple sets and store the resulting set in a key.

@param [String] destination destination key @param [String, Array<String>] keys keys pointing to sets to subtract @return [Integer] number of elements in the resulting set

# File lib/redis/commands/sets.rb, line 133
def sdiffstore(destination, *keys)
  keys.flatten!(1)
  send_command([:sdiffstore, destination].concat(keys))
end
sinter(*keys) click to toggle source

Intersect multiple sets.

@param [String, Array<String>] keys keys pointing to sets to intersect @return [Array<String>] members in the intersection

# File lib/redis/commands/sets.rb, line 142
def sinter(*keys)
  keys.flatten!(1)
  send_command([:sinter].concat(keys))
end
sinterstore(destination, *keys) click to toggle source

Intersect multiple sets and store the resulting set in a key.

@param [String] destination destination key @param [String, Array<String>] keys keys pointing to sets to intersect @return [Integer] number of elements in the resulting set

# File lib/redis/commands/sets.rb, line 152
def sinterstore(destination, *keys)
  keys.flatten!(1)
  send_command([:sinterstore, destination].concat(keys))
end
sismember(key, member) click to toggle source

Determine if a given value is a member of a set.

@param [String] key @param [String] member @return [Boolean]

# File lib/redis/commands/sets.rb, line 95
def sismember(key, member)
  send_command([:sismember, key, member], &Boolify)
end
smembers(key) click to toggle source

Get all the members in a set.

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

# File lib/redis/commands/sets.rb, line 115
def smembers(key)
  send_command([:smembers, key])
end
smismember(key, *members) click to toggle source

Determine if multiple values are members of a set.

@param [String] key @param [String, Array<String>] members @return [Array<Boolean>]

# File lib/redis/commands/sets.rb, line 104
def smismember(key, *members)
  members.flatten!(1)
  send_command([:smismember, key].concat(members)) do |reply|
    reply.map(&Boolify)
  end
end
smove(source, destination, member) click to toggle source

Move a member from one set to another.

@param [String] source source key @param [String] destination destination key @param [String] member member to move from ‘source` to `destination` @return [Boolean]

# File lib/redis/commands/sets.rb, line 86
def smove(source, destination, member)
  send_command([:smove, source, destination, member], &Boolify)
end
spop(key, count = nil) click to toggle source

Remove and return one or more random member from a set.

@param [String] key @return [String] @param [Integer] count

# File lib/redis/commands/sets.rb, line 59
def spop(key, count = nil)
  if count.nil?
    send_command([:spop, key])
  else
    send_command([:spop, key, Integer(count)])
  end
end
srandmember(key, count = nil) click to toggle source

Get one or more random members from a set.

@param [String] key @param [Integer] count @return [String]

# File lib/redis/commands/sets.rb, line 72
def srandmember(key, count = nil)
  if count.nil?
    send_command([:srandmember, key])
  else
    send_command([:srandmember, key, count])
  end
end
srem(key, *members) click to toggle source

Remove one or more members from a set.

@param [String] key @param [String, Array<String>] member one member, or array of members @return [Integer] The number of members that were successfully removed

# File lib/redis/commands/sets.rb, line 39
def srem(key, *members)
  members.flatten!(1)
  send_command([:srem, key].concat(members))
end
srem?(key, *members) click to toggle source

Remove one or more members from a set.

@param [String] key @param [String, Array<String>] member one member, or array of members @return [Boolean] Wether at least one member was successfully removed.

# File lib/redis/commands/sets.rb, line 49
def srem?(key, *members)
  members.flatten!(1)
  send_command([:srem, key].concat(members), &Boolify)
end
sscan(key, cursor, **options) click to toggle source

Scan a set

@example Retrieve the first batch of keys in a set

redis.sscan("set", 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>] the next cursor and all found members

# File lib/redis/commands/sets.rb, line 187
def sscan(key, cursor, **options)
  _scan(:sscan, cursor, [key], **options)
end
sscan_each(key, **options, &block) click to toggle source

Scan a set

@example Retrieve all of the keys in a set

redis.sscan_each("set").to_a
# => ["key1", "key2", "key3"]

@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 keys in the set

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

  cursor = 0
  loop do
    cursor, keys = sscan(key, cursor, **options)
    keys.each(&block)
    break if cursor == "0"
  end
end
sunion(*keys) click to toggle source

Add multiple sets.

@param [String, Array<String>] keys keys pointing to sets to unify @return [Array<String>] members in the union

# File lib/redis/commands/sets.rb, line 161
def sunion(*keys)
  keys.flatten!(1)
  send_command([:sunion].concat(keys))
end
sunionstore(destination, *keys) click to toggle source

Add multiple sets and store the resulting set in a key.

@param [String] destination destination key @param [String, Array<String>] keys keys pointing to sets to unify @return [Integer] number of elements in the resulting set

# File lib/redis/commands/sets.rb, line 171
def sunionstore(destination, *keys)
  keys.flatten!(1)
  send_command([:sunionstore, destination].concat(keys))
end