Module: Redis::Commands::Sets

Included in:
Redis::Commands
Defined in:
lib/redis/commands/sets.rb

Instance Method Summary collapse

Instance Method Details

#sadd(key, member) ⇒ Boolean, Integer

Add one or more members to a set.

Parameters:

  • key (String)
  • member (String, Array<String>)

    one member, or array of members

Returns:

  • (Boolean, Integer)

    ‘Boolean` when a single member is specified, holding whether or not adding the member succeeded, or `Integer` when an array of members is specified, holding the number of members that were successfully added



22
23
24
25
26
27
28
29
30
31
# File 'lib/redis/commands/sets.rb', line 22

def sadd(key, member)
  block = if Redis.sadd_returns_boolean && !member.is_a?(Array)
    ::Redis.deprecate!(
      "Redis#sadd will always return an Integer in Redis 5.0.0. Use Redis#sadd? instead." \
      "(called from: #{caller(1, 1).first})"
    )
    Boolify
  end
  send_command([:sadd, key, member], &block)
end

#sadd?(key, member) ⇒ Boolean

Add one or more members to a set.

Parameters:

  • key (String)
  • member (String, Array<String>)

    one member, or array of members

Returns:

  • (Boolean)

    Whether or not at least one member was added.



38
39
40
# File 'lib/redis/commands/sets.rb', line 38

def sadd?(key, member)
  send_command([:sadd, key, member], &Boolify)
end

#scard(key) ⇒ Integer

Get the number of members in a set.

Parameters:

  • key (String)

Returns:

  • (Integer)


10
11
12
# File 'lib/redis/commands/sets.rb', line 10

def scard(key)
  send_command([:scard, key])
end

#sdiff(*keys) ⇒ Array<String>

Subtract multiple sets.

Parameters:

  • keys (String, Array<String>)

    keys pointing to sets to subtract

Returns:

  • (Array<String>)

    members in the difference



138
139
140
# File 'lib/redis/commands/sets.rb', line 138

def sdiff(*keys)
  send_command([:sdiff, *keys])
end

#sdiffstore(destination, *keys) ⇒ Integer

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

Parameters:

  • destination (String)

    destination key

  • keys (String, Array<String>)

    keys pointing to sets to subtract

Returns:

  • (Integer)

    number of elements in the resulting set



147
148
149
# File 'lib/redis/commands/sets.rb', line 147

def sdiffstore(destination, *keys)
  send_command([:sdiffstore, destination, *keys])
end

#sinter(*keys) ⇒ Array<String>

Intersect multiple sets.

Parameters:

  • keys (String, Array<String>)

    keys pointing to sets to intersect

Returns:

  • (Array<String>)

    members in the intersection



155
156
157
# File 'lib/redis/commands/sets.rb', line 155

def sinter(*keys)
  send_command([:sinter, *keys])
end

#sinterstore(destination, *keys) ⇒ Integer

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

Parameters:

  • destination (String)

    destination key

  • keys (String, Array<String>)

    keys pointing to sets to intersect

Returns:

  • (Integer)

    number of elements in the resulting set



164
165
166
# File 'lib/redis/commands/sets.rb', line 164

def sinterstore(destination, *keys)
  send_command([:sinterstore, destination, *keys])
end

#sismember(key, member) ⇒ Boolean

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

Parameters:

  • key (String)
  • member (String)

Returns:

  • (Boolean)


111
112
113
# File 'lib/redis/commands/sets.rb', line 111

def sismember(key, member)
  send_command([:sismember, key, member], &Boolify)
end

#smembers(key) ⇒ Array<String>

Get all the members in a set.

Parameters:

  • key (String)

Returns:

  • (Array<String>)


130
131
132
# File 'lib/redis/commands/sets.rb', line 130

def smembers(key)
  send_command([:smembers, key])
end

#smismember(key, *members) ⇒ Array<Boolean>

Determine if multiple values are members of a set.

Parameters:

  • key (String)
  • members (String, Array<String>)

Returns:

  • (Array<Boolean>)


120
121
122
123
124
# File 'lib/redis/commands/sets.rb', line 120

def smismember(key, *members)
  send_command([:smismember, key, *members]) do |reply|
    reply.map(&Boolify)
  end
end

#smove(source, destination, member) ⇒ Boolean

Move a member from one set to another.

Parameters:

  • source (String)

    source key

  • destination (String)

    destination key

  • member (String)

    member to move from ‘source` to `destination`

Returns:

  • (Boolean)


102
103
104
# File 'lib/redis/commands/sets.rb', line 102

def smove(source, destination, member)
  send_command([:smove, source, destination, member], &Boolify)
end

#spop(key, count = nil) ⇒ String

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

Parameters:

  • key (String)
  • count (Integer) (defaults to: nil)

Returns:

  • (String)


75
76
77
78
79
80
81
# File 'lib/redis/commands/sets.rb', line 75

def spop(key, count = nil)
  if count.nil?
    send_command([:spop, key])
  else
    send_command([:spop, key, count])
  end
end

#srandmember(key, count = nil) ⇒ String

Get one or more random members from a set.

Parameters:

  • key (String)
  • count (Integer) (defaults to: nil)

Returns:

  • (String)


88
89
90
91
92
93
94
# File 'lib/redis/commands/sets.rb', line 88

def srandmember(key, count = nil)
  if count.nil?
    send_command([:srandmember, key])
  else
    send_command([:srandmember, key, count])
  end
end

#srem(key, member) ⇒ Boolean, Integer

Remove one or more members from a set.

Parameters:

  • key (String)
  • member (String, Array<String>)

    one member, or array of members

Returns:

  • (Boolean, Integer)

    ‘Boolean` when a single member is specified, holding whether or not removing the member succeeded, or `Integer` when an array of members is specified, holding the number of members that were successfully removed



50
51
52
53
54
55
56
57
58
59
# File 'lib/redis/commands/sets.rb', line 50

def srem(key, member)
  block = if Redis.sadd_returns_boolean && !member.is_a?(Array)
    ::Redis.deprecate!(
      "Redis#srem will always return an Integer in Redis 5.0.0. Use Redis#srem? instead." \
      "(called from: #{caller(1, 1).first})"
    )
    Boolify
  end
  send_command([:srem, key, member], &block)
end

#srem?(key, member) ⇒ Boolean

Remove one or more members from a set.

Parameters:

  • key (String)
  • member (String, Array<String>)

    one member, or array of members

Returns:

  • (Boolean)

    ‘Boolean` Whether or not a member was removed.



66
67
68
# File 'lib/redis/commands/sets.rb', line 66

def srem?(key, member)
  send_command([:srem, key, member], &Boolify)
end

#sscan(key, cursor, **options) ⇒ String+

Scan a set

Examples:

Retrieve the first batch of keys in a set

redis.sscan("set", 0)

Parameters:

  • cursor (String, Integer)

    the cursor of the iteration

  • options (Hash)
    • ‘:match => String`: only return keys matching the pattern

    • ‘:count => Integer`: return count keys at most per iteration

Returns:

  • (String, Array<String>)

    the next cursor and all found members



196
197
198
# File 'lib/redis/commands/sets.rb', line 196

def sscan(key, cursor, **options)
  _scan(:sscan, cursor, [key], **options)
end

#sscan_each(key, **options, &block) ⇒ Enumerator

Scan a set

Examples:

Retrieve all of the keys in a set

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

Parameters:

  • options (Hash)
    • ‘:match => String`: only return keys matching the pattern

    • ‘:count => Integer`: return count keys at most per iteration

Returns:

  • (Enumerator)

    an enumerator for all keys in the set



211
212
213
214
215
216
217
218
219
220
# File 'lib/redis/commands/sets.rb', line 211

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) ⇒ Array<String>

Add multiple sets.

Parameters:

  • keys (String, Array<String>)

    keys pointing to sets to unify

Returns:

  • (Array<String>)

    members in the union



172
173
174
# File 'lib/redis/commands/sets.rb', line 172

def sunion(*keys)
  send_command([:sunion, *keys])
end

#sunionstore(destination, *keys) ⇒ Integer

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

Parameters:

  • destination (String)

    destination key

  • keys (String, Array<String>)

    keys pointing to sets to unify

Returns:

  • (Integer)

    number of elements in the resulting set



181
182
183
# File 'lib/redis/commands/sets.rb', line 181

def sunionstore(destination, *keys)
  send_command([:sunionstore, destination, *keys])
end