redis 4.5.1 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +51 -0
- data/README.md +10 -10
- data/lib/redis/client.rb +14 -13
- data/lib/redis/cluster/command.rb +4 -6
- data/lib/redis/cluster/node.rb +12 -0
- data/lib/redis/cluster.rb +24 -0
- data/lib/redis/commands/bitmaps.rb +63 -0
- data/lib/redis/commands/cluster.rb +45 -0
- data/lib/redis/commands/connection.rb +58 -0
- data/lib/redis/commands/geo.rb +84 -0
- data/lib/redis/commands/hashes.rb +251 -0
- data/lib/redis/commands/hyper_log_log.rb +37 -0
- data/lib/redis/commands/keys.rb +411 -0
- data/lib/redis/commands/lists.rb +289 -0
- data/lib/redis/commands/pubsub.rb +72 -0
- data/lib/redis/commands/scripting.rb +114 -0
- data/lib/redis/commands/server.rb +188 -0
- data/lib/redis/commands/sets.rb +207 -0
- data/lib/redis/commands/sorted_sets.rb +804 -0
- data/lib/redis/commands/streams.rb +382 -0
- data/lib/redis/commands/strings.rb +313 -0
- data/lib/redis/commands/transactions.rb +92 -0
- data/lib/redis/commands.rb +242 -0
- data/lib/redis/connection/hiredis.rb +3 -2
- data/lib/redis/connection/ruby.rb +8 -5
- data/lib/redis/connection/synchrony.rb +10 -8
- data/lib/redis/connection.rb +1 -1
- data/lib/redis/distributed.rb +46 -9
- data/lib/redis/pipeline.rb +95 -2
- data/lib/redis/version.rb +1 -1
- data/lib/redis.rb +133 -3675
- metadata +21 -4
@@ -0,0 +1,207 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Redis
|
4
|
+
module Commands
|
5
|
+
module Sets
|
6
|
+
# Get the number of members in a set.
|
7
|
+
#
|
8
|
+
# @param [String] key
|
9
|
+
# @return [Integer]
|
10
|
+
def scard(key)
|
11
|
+
send_command([:scard, key])
|
12
|
+
end
|
13
|
+
|
14
|
+
# Add one or more members to a set.
|
15
|
+
#
|
16
|
+
# @param [String] key
|
17
|
+
# @param [String, Array<String>] member one member, or array of members
|
18
|
+
# @return [Boolean, Integer] `Boolean` when a single member is specified,
|
19
|
+
# holding whether or not adding the member succeeded, or `Integer` when an
|
20
|
+
# array of members is specified, holding the number of members that were
|
21
|
+
# successfully added
|
22
|
+
def sadd(key, member)
|
23
|
+
send_command([:sadd, key, member]) do |reply|
|
24
|
+
if member.is_a? Array
|
25
|
+
# Variadic: return integer
|
26
|
+
reply
|
27
|
+
else
|
28
|
+
# Single argument: return boolean
|
29
|
+
Boolify.call(reply)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Remove one or more members from a set.
|
35
|
+
#
|
36
|
+
# @param [String] key
|
37
|
+
# @param [String, Array<String>] member one member, or array of members
|
38
|
+
# @return [Boolean, Integer] `Boolean` when a single member is specified,
|
39
|
+
# holding whether or not removing the member succeeded, or `Integer` when an
|
40
|
+
# array of members is specified, holding the number of members that were
|
41
|
+
# successfully removed
|
42
|
+
def srem(key, member)
|
43
|
+
send_command([:srem, key, member]) do |reply|
|
44
|
+
if member.is_a? Array
|
45
|
+
# Variadic: return integer
|
46
|
+
reply
|
47
|
+
else
|
48
|
+
# Single argument: return boolean
|
49
|
+
Boolify.call(reply)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Remove and return one or more random member from a set.
|
55
|
+
#
|
56
|
+
# @param [String] key
|
57
|
+
# @return [String]
|
58
|
+
# @param [Integer] count
|
59
|
+
def spop(key, count = nil)
|
60
|
+
if count.nil?
|
61
|
+
send_command([:spop, key])
|
62
|
+
else
|
63
|
+
send_command([:spop, key, count])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Get one or more random members from a set.
|
68
|
+
#
|
69
|
+
# @param [String] key
|
70
|
+
# @param [Integer] count
|
71
|
+
# @return [String]
|
72
|
+
def srandmember(key, count = nil)
|
73
|
+
if count.nil?
|
74
|
+
send_command([:srandmember, key])
|
75
|
+
else
|
76
|
+
send_command([:srandmember, key, count])
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Move a member from one set to another.
|
81
|
+
#
|
82
|
+
# @param [String] source source key
|
83
|
+
# @param [String] destination destination key
|
84
|
+
# @param [String] member member to move from `source` to `destination`
|
85
|
+
# @return [Boolean]
|
86
|
+
def smove(source, destination, member)
|
87
|
+
send_command([:smove, source, destination, member], &Boolify)
|
88
|
+
end
|
89
|
+
|
90
|
+
# Determine if a given value is a member of a set.
|
91
|
+
#
|
92
|
+
# @param [String] key
|
93
|
+
# @param [String] member
|
94
|
+
# @return [Boolean]
|
95
|
+
def sismember(key, member)
|
96
|
+
send_command([:sismember, key, member], &Boolify)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Determine if multiple values are members of a set.
|
100
|
+
#
|
101
|
+
# @param [String] key
|
102
|
+
# @param [String, Array<String>] members
|
103
|
+
# @return [Array<Boolean>]
|
104
|
+
def smismember(key, *members)
|
105
|
+
send_command([:smismember, key, *members]) do |reply|
|
106
|
+
reply.map(&Boolify)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Get all the members in a set.
|
111
|
+
#
|
112
|
+
# @param [String] key
|
113
|
+
# @return [Array<String>]
|
114
|
+
def smembers(key)
|
115
|
+
send_command([:smembers, key])
|
116
|
+
end
|
117
|
+
|
118
|
+
# Subtract multiple sets.
|
119
|
+
#
|
120
|
+
# @param [String, Array<String>] keys keys pointing to sets to subtract
|
121
|
+
# @return [Array<String>] members in the difference
|
122
|
+
def sdiff(*keys)
|
123
|
+
send_command([:sdiff, *keys])
|
124
|
+
end
|
125
|
+
|
126
|
+
# Subtract multiple sets and store the resulting set in a key.
|
127
|
+
#
|
128
|
+
# @param [String] destination destination key
|
129
|
+
# @param [String, Array<String>] keys keys pointing to sets to subtract
|
130
|
+
# @return [Integer] number of elements in the resulting set
|
131
|
+
def sdiffstore(destination, *keys)
|
132
|
+
send_command([:sdiffstore, destination, *keys])
|
133
|
+
end
|
134
|
+
|
135
|
+
# Intersect multiple sets.
|
136
|
+
#
|
137
|
+
# @param [String, Array<String>] keys keys pointing to sets to intersect
|
138
|
+
# @return [Array<String>] members in the intersection
|
139
|
+
def sinter(*keys)
|
140
|
+
send_command([:sinter, *keys])
|
141
|
+
end
|
142
|
+
|
143
|
+
# Intersect multiple sets and store the resulting set in a key.
|
144
|
+
#
|
145
|
+
# @param [String] destination destination key
|
146
|
+
# @param [String, Array<String>] keys keys pointing to sets to intersect
|
147
|
+
# @return [Integer] number of elements in the resulting set
|
148
|
+
def sinterstore(destination, *keys)
|
149
|
+
send_command([:sinterstore, destination, *keys])
|
150
|
+
end
|
151
|
+
|
152
|
+
# Add multiple sets.
|
153
|
+
#
|
154
|
+
# @param [String, Array<String>] keys keys pointing to sets to unify
|
155
|
+
# @return [Array<String>] members in the union
|
156
|
+
def sunion(*keys)
|
157
|
+
send_command([:sunion, *keys])
|
158
|
+
end
|
159
|
+
|
160
|
+
# Add multiple sets and store the resulting set in a key.
|
161
|
+
#
|
162
|
+
# @param [String] destination destination key
|
163
|
+
# @param [String, Array<String>] keys keys pointing to sets to unify
|
164
|
+
# @return [Integer] number of elements in the resulting set
|
165
|
+
def sunionstore(destination, *keys)
|
166
|
+
send_command([:sunionstore, destination, *keys])
|
167
|
+
end
|
168
|
+
|
169
|
+
# Scan a set
|
170
|
+
#
|
171
|
+
# @example Retrieve the first batch of keys in a set
|
172
|
+
# redis.sscan("set", 0)
|
173
|
+
#
|
174
|
+
# @param [String, Integer] cursor the cursor of the iteration
|
175
|
+
# @param [Hash] options
|
176
|
+
# - `:match => String`: only return keys matching the pattern
|
177
|
+
# - `:count => Integer`: return count keys at most per iteration
|
178
|
+
#
|
179
|
+
# @return [String, Array<String>] the next cursor and all found members
|
180
|
+
def sscan(key, cursor, **options)
|
181
|
+
_scan(:sscan, cursor, [key], **options)
|
182
|
+
end
|
183
|
+
|
184
|
+
# Scan a set
|
185
|
+
#
|
186
|
+
# @example Retrieve all of the keys in a set
|
187
|
+
# redis.sscan_each("set").to_a
|
188
|
+
# # => ["key1", "key2", "key3"]
|
189
|
+
#
|
190
|
+
# @param [Hash] options
|
191
|
+
# - `:match => String`: only return keys matching the pattern
|
192
|
+
# - `:count => Integer`: return count keys at most per iteration
|
193
|
+
#
|
194
|
+
# @return [Enumerator] an enumerator for all keys in the set
|
195
|
+
def sscan_each(key, **options, &block)
|
196
|
+
return to_enum(:sscan_each, key, **options) unless block_given?
|
197
|
+
|
198
|
+
cursor = 0
|
199
|
+
loop do
|
200
|
+
cursor, keys = sscan(key, cursor, **options)
|
201
|
+
keys.each(&block)
|
202
|
+
break if cursor == "0"
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|