module Redis::Commands::Sets
Public Instance Methods
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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