active_redis_db 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.fasterer.yml +19 -0
- data/.gitattributes +2 -0
- data/.gitignore +9 -0
- data/.reek.yml +29 -0
- data/.rspec +4 -0
- data/.rubocop.yml +26 -0
- data/.travis.yml +13 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +6 -0
- data/README.md +90 -0
- data/Rakefile +7 -0
- data/active_redis_db.gemspec +35 -0
- data/bin/console +15 -0
- data/bin/rake +15 -0
- data/bin/setup +7 -0
- data/lib/.DS_Store +0 -0
- data/lib/active_redis_db/.DS_Store +0 -0
- data/lib/active_redis_db/base.rb +88 -0
- data/lib/active_redis_db/configuration.rb +34 -0
- data/lib/active_redis_db/connection.rb +103 -0
- data/lib/active_redis_db/geo.rb +31 -0
- data/lib/active_redis_db/hash.rb +79 -0
- data/lib/active_redis_db/hyper_log_log.rb +19 -0
- data/lib/active_redis_db/key.rb +95 -0
- data/lib/active_redis_db/list.rb +129 -0
- data/lib/active_redis_db/pub_sub.rb +35 -0
- data/lib/active_redis_db/railtie.rb +9 -0
- data/lib/active_redis_db/script.rb +19 -0
- data/lib/active_redis_db/set.rb +72 -0
- data/lib/active_redis_db/sorted_set.rb +159 -0
- data/lib/active_redis_db/string.rb +100 -0
- data/lib/active_redis_db/transaction.rb +27 -0
- data/lib/active_redis_db/version.rb +5 -0
- data/lib/active_redis_db.rb +12 -0
- data/lib/generators/active_redis_db/install_generator.rb +12 -0
- data/lib/generators/active_redis_db/templates/install.rb +7 -0
- data/lib/tasks/redis.rake +33 -0
- metadata +222 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveRedisDB::Key < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def exists?(key)
|
7
|
+
client.exists(normalize_key(key))
|
8
|
+
end
|
9
|
+
|
10
|
+
def type?(key)
|
11
|
+
client.type(normalize_key(key))
|
12
|
+
end
|
13
|
+
|
14
|
+
def ttl?(key, format = :seconds)
|
15
|
+
normalized_key = normalize_key(key)
|
16
|
+
|
17
|
+
seconds?(format) ? client.ttl(normalized_key) : client.pttl(normalized_key)
|
18
|
+
end
|
19
|
+
|
20
|
+
def sort(key, opts = {})
|
21
|
+
client.sort(normalize_key(key), opts)
|
22
|
+
end
|
23
|
+
|
24
|
+
def sample
|
25
|
+
client.randomkey
|
26
|
+
end
|
27
|
+
|
28
|
+
def rename(key, value)
|
29
|
+
client.rename(normalize_key(key), value.to_s)
|
30
|
+
end
|
31
|
+
|
32
|
+
def rename!(key, value)
|
33
|
+
client.renamenx(normalize_key(key), value.to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy(key)
|
37
|
+
client.del(normalize_key(key))
|
38
|
+
end
|
39
|
+
|
40
|
+
def persist(key)
|
41
|
+
client.persist(normalize_key(key))
|
42
|
+
end
|
43
|
+
|
44
|
+
def expire(key, seconds, format = :seconds)
|
45
|
+
normalized_key = normalize_key(key)
|
46
|
+
|
47
|
+
if seconds?(format)
|
48
|
+
client.expire(normalized_key, seconds)
|
49
|
+
else
|
50
|
+
client.pexpire(normalized_key, seconds)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def expire_at(key, seconds, format = :seconds)
|
55
|
+
normalized_key = normalize_key(key)
|
56
|
+
|
57
|
+
if seconds?(format)
|
58
|
+
client.expireat(normalized_key, seconds)
|
59
|
+
else
|
60
|
+
client.pexpireat(normalized_key, seconds)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def dump(key)
|
65
|
+
client.dump(normalize_key(key))
|
66
|
+
end
|
67
|
+
|
68
|
+
def match(pattern = '*')
|
69
|
+
value = client.keys(normalize_key(pattern))
|
70
|
+
value = nil if value.empty?
|
71
|
+
value
|
72
|
+
end
|
73
|
+
|
74
|
+
def migrate(key, options)
|
75
|
+
client.migrate(normalize_key(key), options)
|
76
|
+
end
|
77
|
+
|
78
|
+
def move(key, destination)
|
79
|
+
client.move(normalize_key(key), destination)
|
80
|
+
end
|
81
|
+
|
82
|
+
def object(*args)
|
83
|
+
client.object(args)
|
84
|
+
end
|
85
|
+
|
86
|
+
def restore(key, milliseconds, value)
|
87
|
+
client.restore(normalize_key(key), milliseconds, value)
|
88
|
+
end
|
89
|
+
|
90
|
+
def scan(cursor, opts = {})
|
91
|
+
client.scan(cursor, opts)
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveRedisDB::List < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def find(key, position = 1)
|
7
|
+
value = client.lindex(normalize_key(key), (position - 1))
|
8
|
+
value = metamorph(value) if evaluate?
|
9
|
+
value
|
10
|
+
end
|
11
|
+
|
12
|
+
def first(key, limit = 1)
|
13
|
+
value = client.lrange(normalize_key(key), 0, -1)
|
14
|
+
value = (limit == 1 ? value.first : value.first(limit))
|
15
|
+
value = metamorph(value) if evaluate?
|
16
|
+
value
|
17
|
+
end
|
18
|
+
|
19
|
+
def last(key, limit = 1)
|
20
|
+
value = client.lrange(normalize_key(key), 0, -1)
|
21
|
+
value = (limit == 1 ? value.last : value.last(limit))
|
22
|
+
value = metamorph(value) if evaluate?
|
23
|
+
value
|
24
|
+
end
|
25
|
+
|
26
|
+
def between(key, start = 1, finish = 0)
|
27
|
+
value = client.lrange(normalize_key(key), (start - 1), (finish - 1))
|
28
|
+
metatransform(value)
|
29
|
+
end
|
30
|
+
|
31
|
+
def all(key)
|
32
|
+
value = client.lrange(normalize_key(key), 0, -1)
|
33
|
+
metatransform(value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def count(key)
|
37
|
+
client.llen(normalize_key(key))
|
38
|
+
end
|
39
|
+
|
40
|
+
def create(key, value, order = :prepend)
|
41
|
+
normalized_key = normalize_key(key)
|
42
|
+
|
43
|
+
append?(order) ? client.rpush(normalized_key, value) : client.lpush(normalized_key, value)
|
44
|
+
end
|
45
|
+
|
46
|
+
def create!(key, value, order = :prepend)
|
47
|
+
normalized_key = normalize_key(key)
|
48
|
+
|
49
|
+
append?(order) ? client.rpushx(normalized_key, value) : client.lpushx(normalized_key, value)
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_limit(key, value, limit, order = :prepend)
|
53
|
+
normalized_key = normalize_key(key)
|
54
|
+
|
55
|
+
append?(order) ? client.rpush(normalized_key, value) : client.lpush(normalized_key, value)
|
56
|
+
client.ltrim(normalized_key, 0, (limit - 1))
|
57
|
+
end
|
58
|
+
|
59
|
+
def create_limit!(key, value, limit, order = :prepend)
|
60
|
+
normalized_key = normalize_key(key)
|
61
|
+
|
62
|
+
append?(order) ? client.rpushx(normalized_key, value) : client.lpushx(normalized_key, value)
|
63
|
+
client.ltrim(normalized_key, 0, (limit - 1))
|
64
|
+
end
|
65
|
+
|
66
|
+
def create_before(key, pivot, value)
|
67
|
+
client.linsert(normalize_key(key), :before, pivot, value)
|
68
|
+
end
|
69
|
+
|
70
|
+
def create_after(key, pivot, value)
|
71
|
+
client.linsert(normalize_key(key), :after, pivot, value)
|
72
|
+
end
|
73
|
+
|
74
|
+
def update(key, index, value)
|
75
|
+
client.lset(normalize_key(key), index, value)
|
76
|
+
end
|
77
|
+
|
78
|
+
def move(key, desination)
|
79
|
+
value = client.rpoplpush(normalize_key(key), normalize_key(desination))
|
80
|
+
value = metamorph(value) if evaluate?
|
81
|
+
value
|
82
|
+
end
|
83
|
+
|
84
|
+
def move_blocking(key, desination)
|
85
|
+
value = brpoplpush(normalize_key(key), normalize_key(desination))
|
86
|
+
value = metamorph(value) if evaluate?
|
87
|
+
value
|
88
|
+
end
|
89
|
+
|
90
|
+
def destroy(key, count, value)
|
91
|
+
client.lrem(normalize_key(key), count, value)
|
92
|
+
end
|
93
|
+
|
94
|
+
def destroy_first(key, limit = 1)
|
95
|
+
client.ltrim(normalize_key(key), limit, -1)
|
96
|
+
end
|
97
|
+
|
98
|
+
def destroy_last(key, limit = 1)
|
99
|
+
client.ltrim(normalize_key(key), 0, -(limit + 1))
|
100
|
+
end
|
101
|
+
|
102
|
+
def destroy_except(key, start, finish)
|
103
|
+
client.ltrim(normalize_key(key), (start - 1), (finish - 1))
|
104
|
+
end
|
105
|
+
|
106
|
+
def destroy_all(key)
|
107
|
+
client.ltrim(normalize_key(key), -1, 0)
|
108
|
+
end
|
109
|
+
|
110
|
+
def pop(key, order = :prepend)
|
111
|
+
value = append?(order) ? client.rpop(key) : client.lpop(key)
|
112
|
+
value = metamorph(value) if evaluate?
|
113
|
+
value
|
114
|
+
end
|
115
|
+
|
116
|
+
def pop_blocking(keys, opts = {})
|
117
|
+
timeout = opts[:timeout] || 0
|
118
|
+
value = if append?(opts[:order] || :prepend)
|
119
|
+
client.brpop(keys, timeout)
|
120
|
+
else
|
121
|
+
client.blpop(keys, timeout)
|
122
|
+
end
|
123
|
+
|
124
|
+
value = metamorph(value) if evaluate?
|
125
|
+
value
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveRedisDB::PubSub < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def publish(channel, message)
|
7
|
+
client.publish(channel, message)
|
8
|
+
end
|
9
|
+
|
10
|
+
def subscribed?
|
11
|
+
client.subscribed?
|
12
|
+
end
|
13
|
+
|
14
|
+
def subscribe(*channels, &block)
|
15
|
+
client.subscribe(channels, &block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def unsubscribe(*channels)
|
19
|
+
client.unsubscribe(channels)
|
20
|
+
end
|
21
|
+
|
22
|
+
def match_subscribe(*channels, &block)
|
23
|
+
client.psubscribe(channels, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
def match_unsubscribe(*channels)
|
27
|
+
client.punsubscribe(channels)
|
28
|
+
end
|
29
|
+
|
30
|
+
def state(command, *args)
|
31
|
+
client.pubsub(command, args)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveRedisDB::Script < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def script(command, *args)
|
7
|
+
client.script(command, args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def eval(*args)
|
11
|
+
client.eval(:eval, args)
|
12
|
+
end
|
13
|
+
|
14
|
+
def evalsha(*args)
|
15
|
+
client.eval(:evalsha, args)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveRedisDB::Set < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def find(key)
|
7
|
+
value = client.smembers(normalize_key(key))
|
8
|
+
metatransform(value)
|
9
|
+
end
|
10
|
+
|
11
|
+
def combine(*args)
|
12
|
+
value = client.sunion(*args)
|
13
|
+
metatransform(value)
|
14
|
+
end
|
15
|
+
|
16
|
+
def difference(*args)
|
17
|
+
value = client.sdiff(*args)
|
18
|
+
metatransform(value)
|
19
|
+
end
|
20
|
+
|
21
|
+
def intersection(key, *args)
|
22
|
+
value = client.sinter(normalize_key(key), *args)
|
23
|
+
metatransform(value)
|
24
|
+
end
|
25
|
+
|
26
|
+
def sample(key, value = 1)
|
27
|
+
value = client.srandmember(normalize_key(key), value)
|
28
|
+
metatransform(value)
|
29
|
+
end
|
30
|
+
|
31
|
+
def value?(key, value)
|
32
|
+
client.sismember(normalize_key(key), value)
|
33
|
+
end
|
34
|
+
|
35
|
+
def count(key)
|
36
|
+
client.scard(normalize_key(key))
|
37
|
+
end
|
38
|
+
|
39
|
+
def create(key, *args)
|
40
|
+
client.sadd(normalize_key(key), args)
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_combination(key, *args)
|
44
|
+
client.sunionstore(normalize_key(key), args)
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_difference(key, *args)
|
48
|
+
client.sdiffstore(normalize_key(key), *args)
|
49
|
+
end
|
50
|
+
|
51
|
+
def create_intersection(key, *args)
|
52
|
+
client.sinterstore(normalize_key(key), args)
|
53
|
+
end
|
54
|
+
|
55
|
+
def move(key, destination, value)
|
56
|
+
client.smove(normalize_key(key), destination.to_s, value)
|
57
|
+
end
|
58
|
+
|
59
|
+
def destroy(key, *args)
|
60
|
+
client.srem(normalize_key(key), *args)
|
61
|
+
end
|
62
|
+
|
63
|
+
def destroy_random(key)
|
64
|
+
client.spop(normalize_key(key))
|
65
|
+
end
|
66
|
+
|
67
|
+
def scan(key, cursor, opts = {})
|
68
|
+
client.sscan(normalize_key(key), cursor, opts)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveRedisDB::SortedSet < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def find(key, position, opts = {})
|
7
|
+
position -= 1
|
8
|
+
|
9
|
+
value = client.zrange(normalize_key(key), position, position, opts)
|
10
|
+
value = value.first
|
11
|
+
value = metamorph(value) if evaluate?
|
12
|
+
value
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_score(key, position, opts = {})
|
16
|
+
value = client.zrangebyscore(normalize_key(key), position, position, opts)
|
17
|
+
value = value.first
|
18
|
+
value = metamorph(value) if evaluate?
|
19
|
+
value
|
20
|
+
end
|
21
|
+
|
22
|
+
def first(key, opts = {})
|
23
|
+
value = client.zrange(normalize_key(key), 0, 0, opts)
|
24
|
+
value = value.first
|
25
|
+
value = metamorph(value) if evaluate?
|
26
|
+
value
|
27
|
+
end
|
28
|
+
|
29
|
+
def first_score(key, opts = {})
|
30
|
+
value = client.zrangebyscore(normalize_key(key), 1, 1, opts)
|
31
|
+
value = value.first
|
32
|
+
value = metamorph(value) if evaluate?
|
33
|
+
value
|
34
|
+
end
|
35
|
+
|
36
|
+
def last(key, opts = {})
|
37
|
+
value = client.zrevrange(normalize_key(key), 0, 0, opts)
|
38
|
+
value = value.first
|
39
|
+
value = metamorph(value) if evaluate?
|
40
|
+
value
|
41
|
+
end
|
42
|
+
|
43
|
+
def last_score(key, opts = {})
|
44
|
+
value = client.zrevrangebyscore(normalize_key(key), 1, 1, opts)
|
45
|
+
value = value.first
|
46
|
+
value = metamorph(value) if evaluate?
|
47
|
+
value
|
48
|
+
end
|
49
|
+
|
50
|
+
def between(key, start, finish, opts = {})
|
51
|
+
value = client.zrange(normalize_key(key), (start - 1), (finish - 1), opts)
|
52
|
+
value = metatransform(value)
|
53
|
+
value
|
54
|
+
end
|
55
|
+
|
56
|
+
def between_reverse(key, start, finish, opts = {})
|
57
|
+
value = client.zrevrange(normalize_key(key), (start - 1), (finish - 1), opts)
|
58
|
+
value = metatransform(value)
|
59
|
+
value
|
60
|
+
end
|
61
|
+
|
62
|
+
def between_scores(key, min, max, opts = {})
|
63
|
+
value = client.zrangebyscore(normalize_key(key), min, max, opts)
|
64
|
+
value = metatransform(value)
|
65
|
+
value
|
66
|
+
end
|
67
|
+
|
68
|
+
def between_scores_reverse(key, min, max, opts = {})
|
69
|
+
value = client.zrevrangebyscore(normalize_key(key), min, max, opts)
|
70
|
+
value = metatransform(value)
|
71
|
+
value
|
72
|
+
end
|
73
|
+
|
74
|
+
def between_lex(key, min, max, opts = {})
|
75
|
+
value = client.zrangebylex(normalize_key(key), min, max, opts)
|
76
|
+
value = metatransform(value)
|
77
|
+
value
|
78
|
+
end
|
79
|
+
|
80
|
+
def between_lex_reverse(key, min, max, opts = {})
|
81
|
+
value = client.zrevrangebylex(normalize_key(key), min, max, opts)
|
82
|
+
value = metatransform(value)
|
83
|
+
value
|
84
|
+
end
|
85
|
+
|
86
|
+
def all(key, opts = {})
|
87
|
+
value = client.zrange(normalize_key(key), 0, -1, opts)
|
88
|
+
value = metatransform(value)
|
89
|
+
value
|
90
|
+
end
|
91
|
+
|
92
|
+
def all_reverse(key, opts = {})
|
93
|
+
value = client.zrevrange(normalize_key(key), 0, -1, opts)
|
94
|
+
value = metatransform(value)
|
95
|
+
value
|
96
|
+
end
|
97
|
+
|
98
|
+
def position(key, value)
|
99
|
+
value = client.zrank(normalize_key(key), value)
|
100
|
+
value += 1 unless value.nil?
|
101
|
+
value
|
102
|
+
end
|
103
|
+
|
104
|
+
def position_reverse(key, value)
|
105
|
+
value = client.zrevrank(normalize_key(key), value)
|
106
|
+
value += 1 unless value.nil?
|
107
|
+
value
|
108
|
+
end
|
109
|
+
|
110
|
+
def score(key, value)
|
111
|
+
client.zscore(normalize_key(key), value)
|
112
|
+
end
|
113
|
+
|
114
|
+
def count(key)
|
115
|
+
client.zcard(normalize_key(key))
|
116
|
+
end
|
117
|
+
|
118
|
+
def count_between(key, min, max)
|
119
|
+
client.zcount(normalize_key(key), min, max)
|
120
|
+
end
|
121
|
+
|
122
|
+
def create(key, *args)
|
123
|
+
client.zadd(normalize_key(key), args)
|
124
|
+
end
|
125
|
+
|
126
|
+
def create_intersection(key, keys, opts = {})
|
127
|
+
client.zinterstore(normalize_key(key), keys, opts)
|
128
|
+
end
|
129
|
+
|
130
|
+
def create_combination(key, keys, opts = {})
|
131
|
+
client.zunionstore(normalize_key(key), keys, opts)
|
132
|
+
end
|
133
|
+
|
134
|
+
def increment(key, value, count)
|
135
|
+
client.zincrby(normalize_key(key), count, value)
|
136
|
+
end
|
137
|
+
|
138
|
+
def destroy(key, at)
|
139
|
+
client.zrem(normalize_key(key), at)
|
140
|
+
end
|
141
|
+
|
142
|
+
def destroy_between(key, start, finish)
|
143
|
+
client.zremrangebyrank(normalize_key(key), (start - 1), (finish - 1))
|
144
|
+
end
|
145
|
+
|
146
|
+
def destroy_scores(key, min, max)
|
147
|
+
client.zremrangebyscore(normalize_key(key), min, max)
|
148
|
+
end
|
149
|
+
|
150
|
+
def destroy_lex(key, min, max, opts = {})
|
151
|
+
client.zrevrangebylex(normalize_key(key), max, min, opts)
|
152
|
+
end
|
153
|
+
|
154
|
+
def scan(key, cursor, opts = {})
|
155
|
+
client.zscan(normalize_key(key), cursor, opts)
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
|
3
|
+
class ActiveRedisDB::String < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def find(key)
|
7
|
+
value = client.get(normalize_key(key))
|
8
|
+
value = metamorph(value) if evaluate?
|
9
|
+
value
|
10
|
+
end
|
11
|
+
|
12
|
+
def find_each(*args)
|
13
|
+
args = stringify_keys(args)
|
14
|
+
value = client.mget(args)
|
15
|
+
value = metamorph(value) if evaluate?
|
16
|
+
value
|
17
|
+
end
|
18
|
+
|
19
|
+
def length(key)
|
20
|
+
client.strlen(normalize_key(key))
|
21
|
+
end
|
22
|
+
|
23
|
+
def split(key, start, finish)
|
24
|
+
client.getrange(normalize_key(key), start, finish)
|
25
|
+
end
|
26
|
+
|
27
|
+
def create(key, value, opts = {})
|
28
|
+
client.set(normalize_key(key), value, opts)
|
29
|
+
end
|
30
|
+
|
31
|
+
def create!(key, value)
|
32
|
+
client.setnx(normalize_key(key), value)
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_each(*args)
|
36
|
+
args = stringify_keys(args)
|
37
|
+
client.mset(args)
|
38
|
+
end
|
39
|
+
|
40
|
+
def create_each!(*args)
|
41
|
+
args = stringify_keys(args)
|
42
|
+
client.msetnx(args)
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_until(key, value, seconds, format = :seconds)
|
46
|
+
normalized_key = normalize_key(key)
|
47
|
+
|
48
|
+
if seconds?(format)
|
49
|
+
client.setex(normalized_key, seconds, value)
|
50
|
+
else
|
51
|
+
client.psetex(normalized_key, seconds, value)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def append(key, value)
|
56
|
+
client.append(normalize_key(key), value)
|
57
|
+
end
|
58
|
+
|
59
|
+
def replace(key, value, offset)
|
60
|
+
client.setrange(normalize_key(key), offset, value)
|
61
|
+
end
|
62
|
+
|
63
|
+
def decrement(key, value = 1)
|
64
|
+
normalized_key = normalize_key(key)
|
65
|
+
|
66
|
+
value == 1 ? client.decr(normalized_key) : client.decrby(normalized_key, value)
|
67
|
+
end
|
68
|
+
|
69
|
+
def increment(key, value = 1)
|
70
|
+
normalized_key = normalize_key(key)
|
71
|
+
|
72
|
+
if value.is_a?(Float)
|
73
|
+
client.incrbyfloat(normalized_key, value)
|
74
|
+
else
|
75
|
+
value == 1 ? client.incr(normalized_key) : client.incrby(normalized_key, value)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def reset(key, value = 0)
|
80
|
+
client.getset(normalize_key(key), value)
|
81
|
+
end
|
82
|
+
|
83
|
+
def bit_count(key, start = 0, finish = -1)
|
84
|
+
client.bitcount(normalize_key(key), start, finish)
|
85
|
+
end
|
86
|
+
|
87
|
+
def bit_where(operation, key, *keys)
|
88
|
+
client.bitop(operation, key, *keys)
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_bit(key, offset)
|
92
|
+
client.getbit(normalize_key(key), offset)
|
93
|
+
end
|
94
|
+
|
95
|
+
def set_bit(key, offset, bit)
|
96
|
+
client.setbit(normalize_key(key), offset, bit)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveRedisDB::Transaction < ActiveRedisDB::Base
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def discard
|
7
|
+
client.discard
|
8
|
+
end
|
9
|
+
|
10
|
+
def exec
|
11
|
+
client.exec
|
12
|
+
end
|
13
|
+
|
14
|
+
def multi(&block)
|
15
|
+
client.multi(&block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def watch(*args)
|
19
|
+
client.watch(args)
|
20
|
+
end
|
21
|
+
|
22
|
+
def unwatch
|
23
|
+
client.unwatch
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/railtie'
|
4
|
+
|
5
|
+
%w[
|
6
|
+
version railtie configuration base connection geo hash hyper_log_log
|
7
|
+
key list pub_sub script set sorted_set string transaction
|
8
|
+
].each do |file_name|
|
9
|
+
require "active_redis_db/#{file_name}"
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'generators/active_redis_db/install_generator'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
|
5
|
+
class ActiveRedisDB::InstallGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
def copy_initializer_file
|
9
|
+
copy_file('install.rb', 'config/initializers/active_redis_db.rb')
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|