redis-cluster 0.0.7

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.
@@ -0,0 +1,234 @@
1
+ # frozen_string_literal: true
2
+ require 'redis'
3
+
4
+ class RedisCluster
5
+ module Function
6
+
7
+ # String implement redis strings commands. There will be some adjustment for cluster.
8
+ # see https://redis.io/commands#string. Most of the code are copied from
9
+ # https://github.com/redis/redis-rb/blob/master/lib/redis.rb.
10
+ #
11
+ # SETTER = [:getset, :append, :setbit, :setrange, :set, :setex, :psetex, :setnx, :incr,
12
+ # :incrby, :incrbyfloat, :decr, :decrby]
13
+ # GETTER = [:strlen, :bitpos, :bitcount, :getbit, :getrange, :get]
14
+ module String
15
+
16
+ # Decrement the integer value of a key by one.
17
+ #
18
+ # @example
19
+ # redis.decr("value")
20
+ # # => 4
21
+ #
22
+ # @param [String] key
23
+ # @return [Fixnum] value after decrementing it
24
+ def decr(key)
25
+ call(key, [:decr, key])
26
+ end
27
+
28
+ # Decrement the integer value of a key by the given number.
29
+ #
30
+ # @example
31
+ # redis.decrby("value", 5)
32
+ # # => 0
33
+ #
34
+ # @param [String] key
35
+ # @param [Fixnum] decrement
36
+ # @return [Fixnum] value after decrementing it
37
+ def decrby(key, decrement)
38
+ call(key, [:decrby, key, decrement])
39
+ end
40
+
41
+ # Increment the integer value of a key by one.
42
+ #
43
+ # @example
44
+ # redis.incr("value")
45
+ # # => 6
46
+ #
47
+ # @param [String] key
48
+ # @return [Fixnum] value after incrementing it
49
+ def incr(key)
50
+ call(key, [:incr, key])
51
+ end
52
+
53
+ # Increment the integer value of a key by the given integer number.
54
+ #
55
+ # @example
56
+ # redis.incrby("value", 5)
57
+ # # => 10
58
+ #
59
+ # @param [String] key
60
+ # @param [Fixnum] increment
61
+ # @return [Fixnum] value after incrementing it
62
+ def incrby(key, increment)
63
+ call(key, [:incrby, key, increment])
64
+ end
65
+
66
+ # Increment the numeric value of a key by the given float number.
67
+ #
68
+ # @example
69
+ # redis.incrbyfloat("value", 1.23)
70
+ # # => 1.23
71
+ #
72
+ # @param [String] key
73
+ # @param [Float] increment
74
+ # @return [Float] value after incrementing it
75
+ def incrbyfloat(key, increment)
76
+ call(key, [:incrbyfloat, key, increment], transform: Redis::Floatify)
77
+ end
78
+
79
+ # Set the string value of a key.
80
+ #
81
+ # @param [String] key
82
+ # @param [String] value
83
+ # @param [Hash] options
84
+ # - `:ex => Fixnum`: Set the specified expire time, in seconds.
85
+ # - `:px => Fixnum`: Set the specified expire time, in milliseconds.
86
+ # - `:nx => true`: Only set the key if it does not already exist.
87
+ # - `:xx => true`: Only set the key if it already exist.
88
+ # @return [String, Boolean] `"OK"` or true, false if `:nx => true` or `:xx => true`
89
+ def set(key, value, options = {})
90
+ ex = options[:ex]
91
+ px = options[:px]
92
+ args = [:set, key, value.to_s]
93
+
94
+ args.concat(['EX', ex]) if ex
95
+ args.concat(['PX', px]) if px
96
+ args.concat(['NX']) if options[:nx]
97
+ args.concat(['XX']) if options[:xx]
98
+
99
+ call(key, args, transform: Redis::BoolifySet)
100
+ end
101
+
102
+ # Set the time to live in seconds of a key.
103
+ #
104
+ # @param [String] key
105
+ # @param [Fixnum] ttl
106
+ # @param [String] value
107
+ # @return [String] `"OK"`
108
+ def setex(key, ttl, value)
109
+ call(key, [:setex, key, ttl, value.to_s])
110
+ end
111
+
112
+ # Set the time to live in milliseconds of a key.
113
+ #
114
+ # @param [String] key
115
+ # @param [Fixnum] ttl
116
+ # @param [String] value
117
+ # @return [String] `"OK"`
118
+ def psetex(key, ttl, value)
119
+ call(key, [:psetex, key, ttl, value.to_s])
120
+ end
121
+
122
+ # Set the value of a key, only if the key does not exist.
123
+ #
124
+ # @param [String] key
125
+ # @param [String] value
126
+ # @return [Boolean] whether the key was set or not
127
+ def setnx(key, value)
128
+ call(key, [:setnx, key, value.to_s], transform: Redis::Boolify)
129
+ end
130
+
131
+ # Get the value of a key.
132
+ #
133
+ # @param [String] key
134
+ # @return [String]
135
+ def get(key)
136
+ call(key, [:get, key], read: true)
137
+ end
138
+
139
+ # Overwrite part of a string at key starting at the specified offset.
140
+ #
141
+ # @param [String] key
142
+ # @param [Fixnum] offset byte offset
143
+ # @param [String] value
144
+ # @return [Fixnum] length of the string after it was modified
145
+ def setrange(key, offset, value)
146
+ call(key, [:setrange, key, offset, value.to_s])
147
+ end
148
+
149
+ # Get a substring of the string stored at a key.
150
+ #
151
+ # @param [String] key
152
+ # @param [Fixnum] start zero-based start offset
153
+ # @param [Fixnum] stop zero-based end offset. Use -1 for representing
154
+ # the end of the string
155
+ # @return [Fixnum] `0` or `1`
156
+ def getrange(key, start, stop)
157
+ call(key, [:getrange, key, start, stop], read: true)
158
+ end
159
+
160
+ # Sets or clears the bit at offset in the string value stored at key.
161
+ #
162
+ # @param [String] key
163
+ # @param [Fixnum] offset bit offset
164
+ # @param [Fixnum] value bit value `0` or `1`
165
+ # @return [Fixnum] the original bit value stored at `offset`
166
+ def setbit(key, offset, value)
167
+ call(key, [:setbit, key, offset, value])
168
+ end
169
+
170
+ # Returns the bit value at offset in the string value stored at key.
171
+ #
172
+ # @param [String] key
173
+ # @param [Fixnum] offset bit offset
174
+ # @return [Fixnum] `0` or `1`
175
+ def getbit(key, offset)
176
+ call(key, [:getbit, key, offset], read: true)
177
+ end
178
+
179
+ # Append a value to a key.
180
+ #
181
+ # @param [String] key
182
+ # @param [String] value value to append
183
+ # @return [Fixnum] length of the string after appending
184
+ def append(key, value)
185
+ call(key, [:append, key, value])
186
+ end
187
+
188
+ # Count the number of set bits in a range of the string value stored at key.
189
+ #
190
+ # @param [String] key
191
+ # @param [Fixnum] start start index
192
+ # @param [Fixnum] stop stop index
193
+ # @return [Fixnum] the number of bits set to 1
194
+ def bitcount(key, start = 0, stop = -1)
195
+ call(key, [:bitcount, key, start, stop], read: true)
196
+ end
197
+
198
+ # Return the position of the first bit set to 1 or 0 in a string.
199
+ #
200
+ # @param [String] key
201
+ # @param [Fixnum] bit whether to look for the first 1 or 0 bit
202
+ # @param [Fixnum] start start index
203
+ # @param [Fixnum] stop stop index
204
+ # @return [Fixnum] the position of the first 1/0 bit.
205
+ # -1 if looking for 1 and it is not found or start and stop are given.
206
+ def bitpos(key, bit, start = nil, stop = nil)
207
+ command = [:bitpos, key, bit]
208
+ command << start if start
209
+ command << stop if start && stop
210
+
211
+ call(key, command, read: true)
212
+ end
213
+
214
+ # Set the string value of a key and return its old value.
215
+ #
216
+ # @param [String] key
217
+ # @param [String] value value to replace the current value with
218
+ # @return [String] the old value stored in the key, or `nil` if the key
219
+ # did not exist
220
+ def getset(key, value)
221
+ call(key, [:getset, key, value.to_s])
222
+ end
223
+
224
+ # Get the length of the value stored in a key.
225
+ #
226
+ # @param [String] key
227
+ # @return [Fixnum] the length of the value stored in the key, or 0
228
+ # if the key does not exist
229
+ def strlen(key)
230
+ call(key, [:strlen, key], read: true)
231
+ end
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ require 'redis'
3
+
4
+ class RedisCluster
5
+
6
+ # Future basically act the same way as Redis::Future with some modification
7
+ class Future
8
+ attr_reader :command, :slot
9
+ attr_accessor :asking, :url
10
+
11
+ def initialize(slot, command, transformation)
12
+ @slot = slot
13
+ @command = command
14
+ @transformation = transformation
15
+ @value = Redis::Future::FutureNotReady
16
+ @asking = false
17
+ end
18
+
19
+ def value
20
+ raise @value if @value.is_a?(::RuntimeError)
21
+ @value
22
+ end
23
+
24
+ def value=(value)
25
+ @value = @transformation.call(value)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RedisCluster
4
+ VERSION = '0.0.7'
5
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redis-cluster
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.7
5
+ platform: ruby
6
+ authors:
7
+ - Bukalapak
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ description:
28
+ email:
29
+ - sre@bukalapak.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - lib/redis-cluster.rb
36
+ - lib/redis_cluster/client.rb
37
+ - lib/redis_cluster/cluster.rb
38
+ - lib/redis_cluster/function.rb
39
+ - lib/redis_cluster/function/hash.rb
40
+ - lib/redis_cluster/function/key.rb
41
+ - lib/redis_cluster/function/list.rb
42
+ - lib/redis_cluster/function/scan.rb
43
+ - lib/redis_cluster/function/set.rb
44
+ - lib/redis_cluster/function/sorted_set.rb
45
+ - lib/redis_cluster/function/string.rb
46
+ - lib/redis_cluster/future.rb
47
+ - lib/redis_cluster/version.rb
48
+ homepage: https://github.com/bukalapak/redis-cluster
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.5.1
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Redis cluster client. Support pipelining.
72
+ test_files: []