lite-redis 1.2.0 → 1.3.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/.rubocop.yml +5 -2
- data/CHANGELOG.md +6 -20
- data/Gemfile +1 -1
- data/Gemfile.lock +29 -29
- data/README.md +12 -19
- data/Rakefile +2 -2
- data/bin/console +3 -3
- data/docs/CONNECTION.md +8 -4
- data/docs/GEO.md +8 -4
- data/docs/HASH.md +8 -4
- data/docs/HYPER_LOG_LOG.md +7 -3
- data/docs/KEY.md +7 -3
- data/docs/LIST.md +7 -3
- data/docs/PUB_SUB.md +6 -2
- data/docs/SCRIPT.md +7 -3
- data/docs/SET.md +7 -3
- data/docs/SORTED_SET.md +8 -4
- data/docs/STRING.md +7 -3
- data/docs/TRANSACTION.md +8 -4
- data/lib/generators/lite/redis/install_generator.rb +2 -2
- data/lib/lite/redis/base.rb +53 -2
- data/lib/lite/redis/configuration.rb +2 -0
- data/lib/lite/redis/connection.rb +96 -3
- data/lib/lite/redis/geo.rb +24 -3
- data/lib/lite/redis/hash.rb +60 -3
- data/lib/lite/redis/hyper_log_log.rb +12 -3
- data/lib/lite/redis/key.rb +86 -3
- data/lib/lite/redis/list.rb +124 -3
- data/lib/lite/redis/pub_sub.rb +36 -3
- data/lib/lite/redis/railtie.rb +1 -1
- data/lib/lite/redis/script.rb +12 -3
- data/lib/lite/redis/set.rb +60 -3
- data/lib/lite/redis/sorted_set.rb +127 -3
- data/lib/lite/redis/string.rb +87 -3
- data/lib/lite/redis/transaction.rb +20 -3
- data/lib/lite/redis/version.rb +1 -1
- data/lib/lite/redis.rb +17 -32
- data/lib/tasks/redis.rake +10 -10
- data/lite-redis.gemspec +27 -34
- metadata +7 -16
- data/lib/lite/redis/helpers/base_helper.rb +0 -41
- data/lib/lite/redis/helpers/connection_helper.rb +0 -105
- data/lib/lite/redis/helpers/geo_helper.rb +0 -33
- data/lib/lite/redis/helpers/hash_helper.rb +0 -69
- data/lib/lite/redis/helpers/hyper_log_log_helper.rb +0 -21
- data/lib/lite/redis/helpers/key_helper.rb +0 -95
- data/lib/lite/redis/helpers/list_helper.rb +0 -133
- data/lib/lite/redis/helpers/pub_sub_helper.rb +0 -45
- data/lib/lite/redis/helpers/script_helper.rb +0 -21
- data/lib/lite/redis/helpers/set_helper.rb +0 -69
- data/lib/lite/redis/helpers/sorted_set_helper.rb +0 -136
- data/lib/lite/redis/helpers/string_helper.rb +0 -96
- data/lib/lite/redis/helpers/transaction_helper.rb +0 -29
data/lib/lite/redis/base.rb
CHANGED
@@ -4,8 +4,59 @@ module Lite
|
|
4
4
|
module Redis
|
5
5
|
class Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
attr_writer :client
|
8
|
+
|
9
|
+
def initialize(redis = nil)
|
10
|
+
@client = redis
|
11
|
+
end
|
12
|
+
|
13
|
+
class << self
|
14
|
+
|
15
|
+
def method_missing(method_name, *args, **kwargs, &block)
|
16
|
+
instance = new
|
17
|
+
|
18
|
+
if instance.respond_to_method?(method_name)
|
19
|
+
instance.send(method_name, *args, **kwargs, &block)
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
def client
|
28
|
+
@client ||= Lite::Redis.configuration.client
|
29
|
+
end
|
30
|
+
|
31
|
+
def respond_to_method?(method_name)
|
32
|
+
public_methods.include?(method_name)
|
33
|
+
end
|
34
|
+
|
35
|
+
def respond_to_missing?(method_name, include_private = false)
|
36
|
+
respond_to_method?(method_name) || super
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def append?(order)
|
42
|
+
order.to_s == "append"
|
43
|
+
end
|
44
|
+
|
45
|
+
def milliseconds?(format)
|
46
|
+
format.to_s == "milliseconds"
|
47
|
+
end
|
48
|
+
|
49
|
+
def prepend?(order)
|
50
|
+
order.to_s == "prepend"
|
51
|
+
end
|
52
|
+
|
53
|
+
def seconds?(format)
|
54
|
+
format.to_s == "seconds"
|
55
|
+
end
|
56
|
+
|
57
|
+
def stringify_keys(*keys)
|
58
|
+
keys.map { |key, _| key.to_s }
|
59
|
+
end
|
9
60
|
|
10
61
|
end
|
11
62
|
end
|
@@ -2,10 +2,103 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class Connection <
|
5
|
+
class Connection < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def authenticate(password)
|
8
|
+
client.auth(password)
|
9
|
+
end
|
10
|
+
|
11
|
+
def connected?
|
12
|
+
client.connected?
|
13
|
+
end
|
14
|
+
|
15
|
+
def database(index)
|
16
|
+
client.select(index)
|
17
|
+
end
|
18
|
+
|
19
|
+
def database_id
|
20
|
+
client.database_id
|
21
|
+
end
|
22
|
+
|
23
|
+
def database_size
|
24
|
+
client.dbsize
|
25
|
+
end
|
26
|
+
|
27
|
+
def debug(*args)
|
28
|
+
client.debug(*args)
|
29
|
+
end
|
30
|
+
|
31
|
+
def disconnect
|
32
|
+
client.disconnect
|
33
|
+
end
|
34
|
+
|
35
|
+
def echo(message)
|
36
|
+
client.echo(message)
|
37
|
+
end
|
38
|
+
|
39
|
+
def flush
|
40
|
+
client.flushdb
|
41
|
+
end
|
42
|
+
|
43
|
+
def flush_all
|
44
|
+
client.flushall
|
45
|
+
end
|
46
|
+
|
47
|
+
def info
|
48
|
+
client.info
|
49
|
+
end
|
50
|
+
|
51
|
+
def ping
|
52
|
+
client.ping
|
53
|
+
end
|
54
|
+
|
55
|
+
def quit
|
56
|
+
client.quit
|
57
|
+
end
|
58
|
+
|
59
|
+
def reconnect
|
60
|
+
client.reconnect
|
61
|
+
end
|
62
|
+
|
63
|
+
def rewrite_aof
|
64
|
+
client.bgrewriteaof
|
65
|
+
end
|
66
|
+
|
67
|
+
def save
|
68
|
+
client.bgsave
|
69
|
+
end
|
70
|
+
|
71
|
+
def saved_at
|
72
|
+
client.lastsave
|
73
|
+
end
|
74
|
+
|
75
|
+
def shutdown
|
76
|
+
client.shutdown
|
77
|
+
end
|
78
|
+
|
79
|
+
def slave_of(host, port)
|
80
|
+
client.slaveof(host, port)
|
81
|
+
end
|
82
|
+
|
83
|
+
def slowlog(command, length = nil)
|
84
|
+
client.slowlog(command, length)
|
85
|
+
end
|
86
|
+
|
87
|
+
def synchronize
|
88
|
+
client.synchronize
|
89
|
+
end
|
90
|
+
|
91
|
+
def time
|
92
|
+
client.time
|
93
|
+
end
|
94
|
+
|
95
|
+
def with_reconnect(&block)
|
96
|
+
client.with_reconnect(true, &block)
|
97
|
+
end
|
98
|
+
|
99
|
+
def without_reconnect(&block)
|
100
|
+
client.with_reconnect(false, &block)
|
101
|
+
end
|
9
102
|
|
10
103
|
end
|
11
104
|
end
|
data/lib/lite/redis/geo.rb
CHANGED
@@ -2,10 +2,31 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class Geo <
|
5
|
+
class Geo < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def create(key, *member)
|
8
|
+
client.geoadd(key.to_s, *member)
|
9
|
+
end
|
10
|
+
|
11
|
+
def hash(key, member)
|
12
|
+
client.geohash(key.to_s, member)
|
13
|
+
end
|
14
|
+
|
15
|
+
def position(key, member)
|
16
|
+
client.geopos(key.to_s, member)
|
17
|
+
end
|
18
|
+
|
19
|
+
def distance(key, member1, member2, unit = "m")
|
20
|
+
client.geodist(key.to_s, member1, member2, unit.to_s)
|
21
|
+
end
|
22
|
+
|
23
|
+
def radius(*args, **geoptions)
|
24
|
+
client.georadius(*args, **geoptions)
|
25
|
+
end
|
26
|
+
|
27
|
+
def radius_member(*args, **geoptions)
|
28
|
+
client.georadiusbymember(*args, **geoptions)
|
29
|
+
end
|
9
30
|
|
10
31
|
end
|
11
32
|
end
|
data/lib/lite/redis/hash.rb
CHANGED
@@ -2,10 +2,67 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class Hash <
|
5
|
+
class Hash < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def find(key, field)
|
8
|
+
client.hget(key.to_s, field)
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_each(key, *args)
|
12
|
+
client.hmget(key.to_s, *args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def all(key)
|
16
|
+
client.hgetall(key.to_s)
|
17
|
+
end
|
18
|
+
|
19
|
+
def keys(key)
|
20
|
+
client.hkeys(key.to_s)
|
21
|
+
end
|
22
|
+
|
23
|
+
def values(key)
|
24
|
+
client.hvals(key.to_s)
|
25
|
+
end
|
26
|
+
|
27
|
+
def value_length(key, field)
|
28
|
+
client.hstrlen(key.to_s, field)
|
29
|
+
end
|
30
|
+
|
31
|
+
def count(key)
|
32
|
+
client.hlen(key.to_s)
|
33
|
+
end
|
34
|
+
|
35
|
+
def exists?(key, field)
|
36
|
+
client.hexists(key.to_s, field)
|
37
|
+
end
|
38
|
+
|
39
|
+
def create(key, field, value)
|
40
|
+
client.hset(key.to_s, field, value)
|
41
|
+
end
|
42
|
+
|
43
|
+
def create!(key, field, value)
|
44
|
+
client.hsetnx(key.to_s, field, value)
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_each(key, *args)
|
48
|
+
client.hmset(key.to_s, *args)
|
49
|
+
end
|
50
|
+
|
51
|
+
def increment(key, field, value)
|
52
|
+
if value.is_a?(Float)
|
53
|
+
client.hincrbyfloat(key.to_s, field, value)
|
54
|
+
else
|
55
|
+
client.hincrby(key.to_s, field, value)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def destroy(key, *args)
|
60
|
+
client.hdel(key.to_s, *args)
|
61
|
+
end
|
62
|
+
|
63
|
+
def scan(key, cursor, opts = {})
|
64
|
+
client.hdel(key.to_s, cursor, **opts)
|
65
|
+
end
|
9
66
|
|
10
67
|
end
|
11
68
|
end
|
@@ -2,10 +2,19 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class HyperLogLog <
|
5
|
+
class HyperLogLog < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def create(key, member)
|
8
|
+
client.pfadd(key.to_s, member)
|
9
|
+
end
|
10
|
+
|
11
|
+
def count(*args)
|
12
|
+
client.pfcount(*args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def merge(key, *keys)
|
16
|
+
client.pfmerge(key.to_s, *keys)
|
17
|
+
end
|
9
18
|
|
10
19
|
end
|
11
20
|
end
|
data/lib/lite/redis/key.rb
CHANGED
@@ -2,10 +2,93 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class Key <
|
5
|
+
class Key < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def exists?(key)
|
8
|
+
client.exists(key.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
def type?(key)
|
12
|
+
client.type(key.to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
def ttl?(key, format = :seconds)
|
16
|
+
if seconds?(format)
|
17
|
+
client.ttl(key.to_s)
|
18
|
+
else
|
19
|
+
client.pttl(key.to_s)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def sort(key, opts = {})
|
24
|
+
client.sort(key.to_s, **opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
def sample
|
28
|
+
client.randomkey
|
29
|
+
end
|
30
|
+
|
31
|
+
def rename(key, value)
|
32
|
+
client.rename(key.to_s, value.to_s)
|
33
|
+
end
|
34
|
+
|
35
|
+
def rename!(key, value)
|
36
|
+
client.renamenx(key.to_s, value.to_s)
|
37
|
+
end
|
38
|
+
|
39
|
+
def destroy(key)
|
40
|
+
client.del(key.to_s)
|
41
|
+
end
|
42
|
+
|
43
|
+
def persist(key)
|
44
|
+
client.persist(key.to_s)
|
45
|
+
end
|
46
|
+
|
47
|
+
def expire(key, seconds, format = :seconds)
|
48
|
+
if seconds?(format)
|
49
|
+
client.expire(key.to_s, seconds)
|
50
|
+
else
|
51
|
+
client.pexpire(key.to_s, seconds)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
alias expire_in expire
|
56
|
+
|
57
|
+
def expire_at(key, seconds, format = :seconds)
|
58
|
+
if seconds?(format)
|
59
|
+
client.expireat(key.to_s, seconds)
|
60
|
+
else
|
61
|
+
client.pexpireat(key.to_s, seconds)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def dump(key)
|
66
|
+
client.dump(key.to_s)
|
67
|
+
end
|
68
|
+
|
69
|
+
def match(pattern = "*")
|
70
|
+
client.keys(pattern.to_s)
|
71
|
+
end
|
72
|
+
|
73
|
+
def migrate(key, options)
|
74
|
+
client.migrate(key.to_s, options)
|
75
|
+
end
|
76
|
+
|
77
|
+
def move(key, destination)
|
78
|
+
client.move(key.to_s, destination)
|
79
|
+
end
|
80
|
+
|
81
|
+
def object(*args)
|
82
|
+
client.object(*args)
|
83
|
+
end
|
84
|
+
|
85
|
+
def restore(key, milliseconds, value)
|
86
|
+
client.restore(key.to_s, milliseconds, value)
|
87
|
+
end
|
88
|
+
|
89
|
+
def scan(cursor, opts = {})
|
90
|
+
client.scan(cursor, **opts)
|
91
|
+
end
|
9
92
|
|
10
93
|
end
|
11
94
|
end
|
data/lib/lite/redis/list.rb
CHANGED
@@ -2,10 +2,131 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class List <
|
5
|
+
class List < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def find(key, position = 1)
|
8
|
+
client.lindex(key.to_s, position - 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
def first(key, limit = 1)
|
12
|
+
value = client.lrange(key.to_s, 0, -1)
|
13
|
+
return value.first if limit == 1
|
14
|
+
|
15
|
+
value.first(limit)
|
16
|
+
end
|
17
|
+
|
18
|
+
def last(key, limit = 1)
|
19
|
+
value = client.lrange(key.to_s, 0, -1)
|
20
|
+
return value.last if limit == 1
|
21
|
+
|
22
|
+
value.last(limit)
|
23
|
+
end
|
24
|
+
|
25
|
+
def between(key, start = 1, finish = 0)
|
26
|
+
client.lrange(key.to_s, start - 1, finish - 1)
|
27
|
+
end
|
28
|
+
|
29
|
+
def all(key)
|
30
|
+
client.lrange(key.to_s, 0, -1)
|
31
|
+
end
|
32
|
+
|
33
|
+
def count(key)
|
34
|
+
client.llen(key.to_s)
|
35
|
+
end
|
36
|
+
|
37
|
+
def create(key, value, order = :prepend)
|
38
|
+
if append?(order)
|
39
|
+
client.rpush(key.to_s, value)
|
40
|
+
else
|
41
|
+
client.lpush(key.to_s, value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def create!(key, value, order = :prepend)
|
46
|
+
if append?(order)
|
47
|
+
client.rpushx(key.to_s, value)
|
48
|
+
else
|
49
|
+
client.lpushx(key.to_s, value)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_limit(key, value, limit, order = :prepend)
|
54
|
+
if append?(order)
|
55
|
+
client.rpush(key.to_s, value)
|
56
|
+
else
|
57
|
+
client.lpush(key.to_s, value)
|
58
|
+
end
|
59
|
+
|
60
|
+
client.ltrim(key.to_s, 0, limit - 1)
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_limit!(key, value, limit, order = :prepend)
|
64
|
+
if append?(order)
|
65
|
+
client.rpushx(key.to_s, value)
|
66
|
+
else
|
67
|
+
client.lpushx(key.to_s, value)
|
68
|
+
end
|
69
|
+
|
70
|
+
client.ltrim(key.to_s, 0, limit - 1)
|
71
|
+
end
|
72
|
+
|
73
|
+
def create_before(key, pivot, value)
|
74
|
+
client.linsert(key.to_s, :before, pivot, value)
|
75
|
+
end
|
76
|
+
|
77
|
+
def create_after(key, pivot, value)
|
78
|
+
client.linsert(key.to_s, :after, pivot, value)
|
79
|
+
end
|
80
|
+
|
81
|
+
def update(key, index, value)
|
82
|
+
client.lset(key.to_s, index, value)
|
83
|
+
end
|
84
|
+
|
85
|
+
def move(key, desination)
|
86
|
+
client.rpoplpush(key.to_s, desination.to_s)
|
87
|
+
end
|
88
|
+
|
89
|
+
def move_blocking(key, desination)
|
90
|
+
brpoplpush(key.to_s, desination.to_s)
|
91
|
+
end
|
92
|
+
|
93
|
+
def destroy(key, count, value)
|
94
|
+
client.lrem(key.to_s, count, value)
|
95
|
+
end
|
96
|
+
|
97
|
+
def destroy_first(key, limit = 1)
|
98
|
+
client.ltrim(key.to_s, limit, -1)
|
99
|
+
end
|
100
|
+
|
101
|
+
def destroy_last(key, limit = 1)
|
102
|
+
client.ltrim(key.to_s, 0, -(limit + 1))
|
103
|
+
end
|
104
|
+
|
105
|
+
def destroy_except(key, start, finish)
|
106
|
+
client.ltrim(key.to_s, start - 1, finish - 1)
|
107
|
+
end
|
108
|
+
|
109
|
+
def destroy_all(key)
|
110
|
+
client.ltrim(key.to_s, -1, 0)
|
111
|
+
end
|
112
|
+
|
113
|
+
def pop(key, order = :prepend)
|
114
|
+
if append?(order)
|
115
|
+
client.rpop(key)
|
116
|
+
else
|
117
|
+
client.lpop(key)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def pop_blocking(keys, opts = {})
|
122
|
+
timeout = opts[:timeout] || 0
|
123
|
+
|
124
|
+
if append?(opts[:order] || :prepend)
|
125
|
+
client.brpop(keys, timeout)
|
126
|
+
else
|
127
|
+
client.blpop(keys, timeout)
|
128
|
+
end
|
129
|
+
end
|
9
130
|
|
10
131
|
end
|
11
132
|
end
|
data/lib/lite/redis/pub_sub.rb
CHANGED
@@ -2,10 +2,43 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class PubSub <
|
5
|
+
class PubSub < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def publish(channel, message)
|
8
|
+
client.publish(channel, message)
|
9
|
+
end
|
10
|
+
|
11
|
+
def subscribed?
|
12
|
+
client.subscribed?
|
13
|
+
end
|
14
|
+
|
15
|
+
def subscribe(*channels, timeout: nil, &block)
|
16
|
+
if timeout.nil?
|
17
|
+
client.subscribe(*channels, &block)
|
18
|
+
else
|
19
|
+
client.subscribe_with_timeout(timeout, *channels, &block)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def unsubscribe(*channels)
|
24
|
+
client.unsubscribe(*channels)
|
25
|
+
end
|
26
|
+
|
27
|
+
def match_subscribe(*channels, timeout: nil, &block)
|
28
|
+
if timeout.nil?
|
29
|
+
client.psubscribe(*channels, &block)
|
30
|
+
else
|
31
|
+
client.psubscribe_with_timeout(timeout, *channels, &block)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def match_unsubscribe(*channels)
|
36
|
+
client.punsubscribe(*channels)
|
37
|
+
end
|
38
|
+
|
39
|
+
def state(command, *args)
|
40
|
+
client.pubsub(command, *args)
|
41
|
+
end
|
9
42
|
|
10
43
|
end
|
11
44
|
end
|
data/lib/lite/redis/railtie.rb
CHANGED
data/lib/lite/redis/script.rb
CHANGED
@@ -2,10 +2,19 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class Script <
|
5
|
+
class Script < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def script(command, *args)
|
8
|
+
client.script(command, *args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def eval(*args)
|
12
|
+
client.eval(:eval, *args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def evalsha(*args)
|
16
|
+
client.eval(:evalsha, *args)
|
17
|
+
end
|
9
18
|
|
10
19
|
end
|
11
20
|
end
|
data/lib/lite/redis/set.rb
CHANGED
@@ -2,10 +2,67 @@
|
|
2
2
|
|
3
3
|
module Lite
|
4
4
|
module Redis
|
5
|
-
class Set <
|
5
|
+
class Set < Base
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def find(key)
|
8
|
+
client.smembers(key.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
def combine(*args)
|
12
|
+
client.sunion(*args)
|
13
|
+
end
|
14
|
+
|
15
|
+
def difference(*args)
|
16
|
+
client.sdiff(*args)
|
17
|
+
end
|
18
|
+
|
19
|
+
def intersection(key, *args)
|
20
|
+
client.sinter(key.to_s, *args)
|
21
|
+
end
|
22
|
+
|
23
|
+
def sample(key, value = 1)
|
24
|
+
client.srandmember(key.to_s, value)
|
25
|
+
end
|
26
|
+
|
27
|
+
def value?(key, value)
|
28
|
+
client.sismember(key.to_s, value)
|
29
|
+
end
|
30
|
+
|
31
|
+
def count(key)
|
32
|
+
client.scard(key.to_s)
|
33
|
+
end
|
34
|
+
|
35
|
+
def create(key, args)
|
36
|
+
client.sadd?(key.to_s, args)
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_combination(key, *args)
|
40
|
+
client.sunionstore(key.to_s, *args)
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_difference(key, *args)
|
44
|
+
client.sdiffstore(key.to_s, *args)
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_intersection(key, *args)
|
48
|
+
client.sinterstore(key.to_s, *args)
|
49
|
+
end
|
50
|
+
|
51
|
+
def move(key, destination, value)
|
52
|
+
client.smove(key.to_s, destination.to_s, value)
|
53
|
+
end
|
54
|
+
|
55
|
+
def destroy(key, args)
|
56
|
+
client.srem?(key.to_s, args)
|
57
|
+
end
|
58
|
+
|
59
|
+
def destroy_random(key)
|
60
|
+
client.spop(key.to_s)
|
61
|
+
end
|
62
|
+
|
63
|
+
def scan(key, cursor, opts = {})
|
64
|
+
client.sscan(key.to_s, cursor, **opts)
|
65
|
+
end
|
9
66
|
|
10
67
|
end
|
11
68
|
end
|