lite-redis 1.0.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 +7 -0
- data/.fasterer.yml +19 -0
- data/.gitignore +11 -0
- data/.rspec +4 -0
- data/.rubocop.yml +30 -0
- data/.travis.yml +24 -0
- data/CHANGELOG.md +10 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +135 -0
- data/LICENSE.txt +21 -0
- data/README.md +108 -0
- data/Rakefile +8 -0
- data/_config.yml +1 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/docs/CONNECTION.md +14 -0
- data/docs/GEO.md +14 -0
- data/docs/HASH.md +14 -0
- data/docs/HYPER_LOG_LOG.md +14 -0
- data/docs/KEY.md +14 -0
- data/docs/LIST.md +14 -0
- data/docs/PUB_SUB.md +31 -0
- data/docs/SCRIPT.md +14 -0
- data/docs/SET.md +14 -0
- data/docs/SORTED_SET.md +14 -0
- data/docs/STRING.md +14 -0
- data/docs/TRANSACTION.md +14 -0
- data/lib/generators/lite/redis/install_generator.rb +17 -0
- data/lib/generators/lite/redis/templates/install.rb +5 -0
- data/lib/lite/redis/base.rb +12 -0
- data/lib/lite/redis/configuration.rb +29 -0
- data/lib/lite/redis/connection.rb +12 -0
- data/lib/lite/redis/geo.rb +12 -0
- data/lib/lite/redis/hash.rb +12 -0
- data/lib/lite/redis/helpers/base_helper.rb +39 -0
- data/lib/lite/redis/helpers/connection_helper.rb +105 -0
- data/lib/lite/redis/helpers/geo_helper.rb +33 -0
- data/lib/lite/redis/helpers/hash_helper.rb +69 -0
- data/lib/lite/redis/helpers/hyper_log_log_helper.rb +21 -0
- data/lib/lite/redis/helpers/key_helper.rb +95 -0
- data/lib/lite/redis/helpers/list_helper.rb +133 -0
- data/lib/lite/redis/helpers/pub_sub_helper.rb +45 -0
- data/lib/lite/redis/helpers/script_helper.rb +21 -0
- data/lib/lite/redis/helpers/set_helper.rb +69 -0
- data/lib/lite/redis/helpers/sorted_set_helper.rb +136 -0
- data/lib/lite/redis/helpers/string_helper.rb +98 -0
- data/lib/lite/redis/helpers/transaction_helper.rb +29 -0
- data/lib/lite/redis/hyper_log_log.rb +12 -0
- data/lib/lite/redis/key.rb +12 -0
- data/lib/lite/redis/list.rb +12 -0
- data/lib/lite/redis/pub_sub.rb +12 -0
- data/lib/lite/redis/railtie.rb +16 -0
- data/lib/lite/redis/script.rb +12 -0
- data/lib/lite/redis/set.rb +12 -0
- data/lib/lite/redis/sorted_set.rb +12 -0
- data/lib/lite/redis/string.rb +12 -0
- data/lib/lite/redis/transaction.rb +12 -0
- data/lib/lite/redis/version.rb +9 -0
- data/lib/lite/redis.rb +16 -0
- data/lib/tasks/redis.rake +31 -0
- data/lite-redis.gemspec +53 -0
- metadata +272 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Redis
|
5
|
+
module SetHelper
|
6
|
+
|
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
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Redis
|
5
|
+
module SortedSetHelper
|
6
|
+
|
7
|
+
def find(key, position, opts = {})
|
8
|
+
position -= 1
|
9
|
+
value = client.zrange(key.to_s, position, position, opts)
|
10
|
+
value.first
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_score(key, position, opts = {})
|
14
|
+
value = client.zrangebyscore(key.to_s, position, position, opts)
|
15
|
+
value.first
|
16
|
+
end
|
17
|
+
|
18
|
+
def first(key, opts = {})
|
19
|
+
value = client.zrange(key.to_s, 0, 0, opts)
|
20
|
+
value.first
|
21
|
+
end
|
22
|
+
|
23
|
+
def first_score(key, opts = {})
|
24
|
+
value = client.zrangebyscore(key.to_s, 1, 1, opts)
|
25
|
+
value.first
|
26
|
+
end
|
27
|
+
|
28
|
+
def last(key, opts = {})
|
29
|
+
value = client.zrevrange(key.to_s, 0, 0, opts)
|
30
|
+
value.first
|
31
|
+
end
|
32
|
+
|
33
|
+
def last_score(key, opts = {})
|
34
|
+
value = client.zrevrangebyscore(key.to_s, 1, 1, opts)
|
35
|
+
value.first
|
36
|
+
end
|
37
|
+
|
38
|
+
def between(key, start, finish, opts = {})
|
39
|
+
client.zrange(key.to_s, start - 1, finish - 1, opts)
|
40
|
+
end
|
41
|
+
|
42
|
+
def between_reverse(key, start, finish, opts = {})
|
43
|
+
client.zrevrange(key.to_s, start - 1, finish - 1, opts)
|
44
|
+
end
|
45
|
+
|
46
|
+
def between_scores(key, min, max, opts = {})
|
47
|
+
client.zrangebyscore(key.to_s, min, max, opts)
|
48
|
+
end
|
49
|
+
|
50
|
+
def between_scores_reverse(key, min, max, opts = {})
|
51
|
+
client.zrevrangebyscore(key.to_s, min, max, opts)
|
52
|
+
end
|
53
|
+
|
54
|
+
def between_lex(key, min, max, opts = {})
|
55
|
+
client.zrangebylex(key.to_s, min, max, opts)
|
56
|
+
end
|
57
|
+
|
58
|
+
def between_lex_reverse(key, min, max, opts = {})
|
59
|
+
client.zrevrangebylex(key.to_s, min, max, opts)
|
60
|
+
end
|
61
|
+
|
62
|
+
def all(key, opts = {})
|
63
|
+
client.zrange(key.to_s, 0, -1, opts)
|
64
|
+
end
|
65
|
+
|
66
|
+
def all_reverse(key, opts = {})
|
67
|
+
client.zrevrange(key.to_s, 0, -1, opts)
|
68
|
+
end
|
69
|
+
|
70
|
+
def position(key, value)
|
71
|
+
value = client.zrank(key.to_s, value)
|
72
|
+
value += 1 unless value.nil?
|
73
|
+
value
|
74
|
+
end
|
75
|
+
|
76
|
+
def position_reverse(key, value)
|
77
|
+
value = client.zrevrank(key.to_s, value)
|
78
|
+
value += 1 unless value.nil?
|
79
|
+
value
|
80
|
+
end
|
81
|
+
|
82
|
+
def score(key, value)
|
83
|
+
client.zscore(key.to_s, value)
|
84
|
+
end
|
85
|
+
|
86
|
+
def count(key)
|
87
|
+
client.zcard(key.to_s)
|
88
|
+
end
|
89
|
+
|
90
|
+
def count_between(key, min, max)
|
91
|
+
client.zcount(key.to_s, min, max)
|
92
|
+
end
|
93
|
+
|
94
|
+
def create(key, *args)
|
95
|
+
client.zadd(key.to_s, args)
|
96
|
+
end
|
97
|
+
|
98
|
+
def create_intersection(key, keys, opts = {})
|
99
|
+
client.zinterstore(key.to_s, keys, opts)
|
100
|
+
end
|
101
|
+
|
102
|
+
def create_combination(key, keys, opts = {})
|
103
|
+
client.zunionstore(key.to_s, keys, opts)
|
104
|
+
end
|
105
|
+
|
106
|
+
def increment(key, value, count)
|
107
|
+
client.zincrby(key.to_s, count, value)
|
108
|
+
end
|
109
|
+
|
110
|
+
def decrement(key, value, count)
|
111
|
+
client.zincrby(key.to_s, -count.abs, value)
|
112
|
+
end
|
113
|
+
|
114
|
+
def destroy(key, at)
|
115
|
+
client.zrem(key.to_s, at)
|
116
|
+
end
|
117
|
+
|
118
|
+
def destroy_between(key, start, finish)
|
119
|
+
client.zremrangebyrank(key.to_s, start - 1, finish - 1)
|
120
|
+
end
|
121
|
+
|
122
|
+
def destroy_scores(key, min, max)
|
123
|
+
client.zremrangebyscore(key.to_s, min, max)
|
124
|
+
end
|
125
|
+
|
126
|
+
def destroy_lex(key, min, max, opts = {})
|
127
|
+
client.zrevrangebylex(key.to_s, max, min, opts)
|
128
|
+
end
|
129
|
+
|
130
|
+
def scan(key, cursor, opts = {})
|
131
|
+
client.zscan(key.to_s, cursor, opts)
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Redis
|
5
|
+
module StringHelper
|
6
|
+
|
7
|
+
def find(key)
|
8
|
+
client.get(key.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_each(*args)
|
12
|
+
args = stringify_keys(*args)
|
13
|
+
client.mget(args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def length(key)
|
17
|
+
client.strlen(key.to_s)
|
18
|
+
end
|
19
|
+
|
20
|
+
def split(key, start, finish)
|
21
|
+
client.getrange(key.to_s, start, finish)
|
22
|
+
end
|
23
|
+
|
24
|
+
def create(key, value, opts = {})
|
25
|
+
client.set(key.to_s, value, opts)
|
26
|
+
end
|
27
|
+
|
28
|
+
def create!(key, value)
|
29
|
+
client.setnx(key.to_s, value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_each(*args)
|
33
|
+
args = stringify_keys(*args)
|
34
|
+
client.mset(args)
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_each!(*args)
|
38
|
+
args = stringify_keys(*args)
|
39
|
+
client.msetnx(args)
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_until(key, value, seconds, format = :seconds)
|
43
|
+
if seconds?(format)
|
44
|
+
client.setex(key.to_s, seconds, value)
|
45
|
+
else
|
46
|
+
client.psetex(key.to_s, seconds, value)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def append(key, value)
|
51
|
+
client.append(key.to_s, value)
|
52
|
+
end
|
53
|
+
|
54
|
+
def replace(key, value, offset)
|
55
|
+
client.setrange(key.to_s, offset, value)
|
56
|
+
end
|
57
|
+
|
58
|
+
def decrement(key, value = 1)
|
59
|
+
if value == 1
|
60
|
+
client.decr(key.to_s)
|
61
|
+
else
|
62
|
+
client.decrby(key.to_s, value)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def increment(key, value = 1)
|
67
|
+
if value.is_a?(Float)
|
68
|
+
client.incrbyfloat(key.to_s, value)
|
69
|
+
elsif value == 1
|
70
|
+
client.incr(key.to_s)
|
71
|
+
else
|
72
|
+
client.incrby(key.to_s, value)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def reset(key, value = 0)
|
77
|
+
client.getset(key.to_s, value)
|
78
|
+
end
|
79
|
+
|
80
|
+
def bit_count(key, start = 0, finish = -1)
|
81
|
+
client.bitcount(key.to_s, start, finish)
|
82
|
+
end
|
83
|
+
|
84
|
+
def bit_where(operation, key, *keys)
|
85
|
+
client.bitop(operation, key, *keys)
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_bit(key, offset)
|
89
|
+
client.getbit(key.to_s, offset)
|
90
|
+
end
|
91
|
+
|
92
|
+
def set_bit(key, offset, bit)
|
93
|
+
client.setbit(key.to_s, offset, bit)
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lite
|
4
|
+
module Redis
|
5
|
+
module TransactionHelper
|
6
|
+
|
7
|
+
def discard
|
8
|
+
client.discard
|
9
|
+
end
|
10
|
+
|
11
|
+
def exec
|
12
|
+
client.exec
|
13
|
+
end
|
14
|
+
|
15
|
+
def multi(&block)
|
16
|
+
client.multi(&block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def watch(*args)
|
20
|
+
client.watch(*args)
|
21
|
+
end
|
22
|
+
|
23
|
+
def unwatch
|
24
|
+
client.unwatch
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/railtie'
|
4
|
+
|
5
|
+
module Lite
|
6
|
+
module Redis
|
7
|
+
class Railtie < ::Rails::Railtie
|
8
|
+
|
9
|
+
rake_tasks do
|
10
|
+
path = File.expand_path('../../tasks/*.rake', __FILE__)
|
11
|
+
Dir.each_child(path) { |filename| load(filename) }
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/lite/redis.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'redis'
|
4
|
+
|
5
|
+
require 'lite/redis/version'
|
6
|
+
require 'lite/redis/railtie' if defined?(Rails)
|
7
|
+
require 'lite/redis/configuration'
|
8
|
+
|
9
|
+
%w[
|
10
|
+
base connection geo hash hyper_log_log key list pub_sub script set sorted_set string transaction
|
11
|
+
].each do |file_name|
|
12
|
+
require "lite/redis/helpers/#{file_name}_helper"
|
13
|
+
require "lite/redis/#{file_name}"
|
14
|
+
end
|
15
|
+
|
16
|
+
require 'generators/lite/redis/install_generator'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :db do
|
4
|
+
namespace :redis do
|
5
|
+
desc 'Reset Redis database'
|
6
|
+
task reset: :environment do
|
7
|
+
puts '== Reset: reseting Redis '.ljust(80, '=')
|
8
|
+
total_task_start_time = Time.current
|
9
|
+
|
10
|
+
puts ' -> Resetting'
|
11
|
+
Lite::Redis::Connection.flush
|
12
|
+
|
13
|
+
total_task_elapsed_time = (Time.current - total_task_start_time).round(5)
|
14
|
+
puts "== Reset: reset Redis (#{total_task_elapsed_time}s) ".ljust(80, '=')
|
15
|
+
puts ''
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Reset all Redis databases'
|
19
|
+
task reset_all: :environment do
|
20
|
+
puts '== Reset: reseting all Redis '.ljust(80, '=')
|
21
|
+
total_task_start_time = Time.current
|
22
|
+
|
23
|
+
puts ' -> Resetting'
|
24
|
+
Lite::Redis::Connection.flush_all
|
25
|
+
|
26
|
+
total_task_elapsed_time = (Time.current - total_task_start_time).round(5)
|
27
|
+
puts "== Reset: reset all Redis (#{total_task_elapsed_time}s) ".ljust(80, '=')
|
28
|
+
puts ''
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lite-redis.gemspec
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'lite/redis/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'lite-redis'
|
9
|
+
spec.version = Lite::Redis::VERSION
|
10
|
+
spec.authors = ['Juan Gomez']
|
11
|
+
spec.email = %w[j.gomez@drexed.com]
|
12
|
+
|
13
|
+
spec.summary = 'Access Redis with an ActiveRecord like ORM interface'
|
14
|
+
spec.homepage = 'http://drexed.github.io/lite-redis'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
|
+
if spec.respond_to?(:metadata)
|
20
|
+
spec.metadata.merge(
|
21
|
+
'allowed_push_host' => 'https://rubygems.org',
|
22
|
+
'changelog_uri' => 'https://github.com/drexed/lite-redis/blob/master/CHANGELOG.md',
|
23
|
+
'homepage_uri' => spec.homepage,
|
24
|
+
'source_code_uri' => 'https://github.com/drexed/lite-redis'
|
25
|
+
)
|
26
|
+
else
|
27
|
+
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
28
|
+
'public gem pushes.'
|
29
|
+
end
|
30
|
+
|
31
|
+
# Specify which files should be added to the gem when it is released.
|
32
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
33
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
34
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
35
|
+
end
|
36
|
+
spec.bindir = 'exe'
|
37
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
38
|
+
spec.require_paths = %w[lib]
|
39
|
+
|
40
|
+
spec.add_runtime_dependency 'redis'
|
41
|
+
|
42
|
+
spec.add_development_dependency 'bundler'
|
43
|
+
spec.add_development_dependency 'connection_pool'
|
44
|
+
spec.add_development_dependency 'fakeredis'
|
45
|
+
spec.add_development_dependency 'fasterer'
|
46
|
+
spec.add_development_dependency 'generator_spec'
|
47
|
+
spec.add_development_dependency 'rake'
|
48
|
+
spec.add_development_dependency 'rspec'
|
49
|
+
spec.add_development_dependency 'rspec-rails'
|
50
|
+
spec.add_development_dependency 'rubocop'
|
51
|
+
spec.add_development_dependency 'rubocop-performance'
|
52
|
+
spec.add_development_dependency 'rubocop-rspec'
|
53
|
+
end
|