me-redis 0.1.3 → 0.1.6
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 +17 -0
- data/Dockerfile +2 -1
- data/docker-compose.yml +13 -0
- data/lib/me_redis/me_redis_hot_migrator.rb +6 -6
- data/lib/me_redis/version.rb +1 -1
- data/lib/me_redis/zip_keys.rb +7 -1
- data/lib/me_redis/zip_to_hash.rb +2 -2
- data/lib/me_redis/zip_values.rb +1 -1
- data/lib/me_redis.rb +19 -13
- data/me-redis.gemspec +3 -3
- data/ruby3.Dockerfile +7 -0
- metadata +20 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fcb807ddbff3ae63c2c4ae0a1bdd2bee8e37202ca0477fc3c86d6b7c58feaa3d
|
|
4
|
+
data.tar.gz: 9d60ce417f2b0dfbf5e7fdf56ab6057e1a4f3bdb2ecc6793f8a952dc6fa9ed82
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 644bb9d176681ad580f7d268e6a3d51e4c06632d2269d00521a318544ed34a5fa50e9cc9035d94a6d823c3bd1e7b1d481406c4d3c82681343cfbb64c464e77b0
|
|
7
|
+
data.tar.gz: 4440092927b370e803e9d52eeb67477e9304734b178f4d013b4dec13af4d7ff44d9870190316e89f1fd515130cf0b838ab5401534ef089981cf16f6b2f31c41d
|
data/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
1
|
+
# 0.1.6
|
|
2
|
+
* adapted for ruby 3.1
|
|
3
|
+
|
|
4
|
+
# 0.1.5
|
|
5
|
+
* keys will return keys after applying me_key transformation to a given pattern
|
|
6
|
+
* config now is an OpenStruct, not a Struct
|
|
7
|
+
|
|
8
|
+
# 0.1.4
|
|
9
|
+
* set method signature fix
|
|
10
|
+
* ttl will respect key zipping
|
|
11
|
+
|
|
12
|
+
# 0.1.3
|
|
13
|
+
* minor messaging changes for AWS config, warning popups not on config calls
|
|
14
|
+
but on prepend. Config calls just displays resulting config now
|
|
15
|
+
|
|
1
16
|
# 0.1.2
|
|
2
17
|
* add AwsConfigBlocker extension. Prepending MeRedis successor with this module
|
|
3
18
|
prevents error while using the MeRedis with AWS ElasticCache (AWS blocks all config calls).
|
|
4
19
|
|
|
5
20
|
* added docker-compose for local testing comfort
|
|
6
21
|
|
|
22
|
+
* awesome_print prod dependency
|
|
23
|
+
|
|
7
24
|
# 0.1.1
|
|
8
25
|
* add MockRedis extension
|
data/Dockerfile
CHANGED
data/docker-compose.yml
CHANGED
|
@@ -9,6 +9,19 @@ services:
|
|
|
9
9
|
build: .
|
|
10
10
|
image: me-redis-test
|
|
11
11
|
command: bundle exec rake test
|
|
12
|
+
volumes:
|
|
13
|
+
- '.:/me-redis'
|
|
14
|
+
depends_on:
|
|
15
|
+
- redis
|
|
16
|
+
environment:
|
|
17
|
+
REDIS_URL: redis://redis:6379
|
|
18
|
+
|
|
19
|
+
test3:
|
|
20
|
+
build:
|
|
21
|
+
context: .
|
|
22
|
+
dockerfile: ruby3.Dockerfile
|
|
23
|
+
image: me-redis-test-3
|
|
24
|
+
command: bundle exec rake test
|
|
12
25
|
volumes:
|
|
13
26
|
- '.:/me-redis'
|
|
14
27
|
depends_on:
|
|
@@ -9,17 +9,17 @@ module MeRedisHotMigrator
|
|
|
9
9
|
|
|
10
10
|
base.class_eval do
|
|
11
11
|
ZK_FALLBACK_METHODS.each do |method|
|
|
12
|
-
alias_method "
|
|
12
|
+
alias_method "___#{method}", method
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
include(MeRedis)
|
|
16
16
|
|
|
17
17
|
def me_get( key )
|
|
18
|
-
prev_future =
|
|
18
|
+
prev_future = ___get( key ) unless @client.is_a?(self.class::Client)
|
|
19
19
|
newvl = super(key)
|
|
20
20
|
|
|
21
21
|
newvl.prev_future = prev_future if newvl.is_a?(self.class::Future)
|
|
22
|
-
newvl ||
|
|
22
|
+
newvl || ___get( key )
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def me_mget(*keys)
|
|
@@ -36,15 +36,15 @@ module MeRedisHotMigrator
|
|
|
36
36
|
module PrependMethods
|
|
37
37
|
ZK_FALLBACK_METHODS.each do |method|
|
|
38
38
|
define_method(method) do |*args|
|
|
39
|
-
prev_future = send("
|
|
39
|
+
prev_future = send("___#{method}", *args) unless @client.is_a?(self.class::Client)
|
|
40
40
|
newvl = super(*args)
|
|
41
41
|
|
|
42
42
|
newvl.prev_future = prev_future if newvl.is_a?(self.class::Future)
|
|
43
43
|
|
|
44
44
|
if method != :mget
|
|
45
|
-
newvl || send("
|
|
45
|
+
newvl || send("___#{method}", *args)
|
|
46
46
|
else
|
|
47
|
-
newvl.is_a?(Array) ? newvl.zip( send("
|
|
47
|
+
newvl.is_a?(Array) ? newvl.zip( send("___#{method}", *args) ).map!{|nvl, oldv| nvl || oldv } : newvl
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
end
|
data/lib/me_redis/version.rb
CHANGED
data/lib/me_redis/zip_keys.rb
CHANGED
|
@@ -16,6 +16,11 @@ module MeRedis
|
|
|
16
16
|
end
|
|
17
17
|
end.join
|
|
18
18
|
end
|
|
19
|
+
alias me_key zip_key
|
|
20
|
+
|
|
21
|
+
def keys( pattern )
|
|
22
|
+
super( me_key(pattern) )
|
|
23
|
+
end
|
|
19
24
|
|
|
20
25
|
#---- h_methods ---------------------------
|
|
21
26
|
def hdel( key, hkey ); super( zip_key(key), hkey ) end
|
|
@@ -37,7 +42,8 @@ module MeRedis
|
|
|
37
42
|
def persist(key); super(zip_key(key)) end
|
|
38
43
|
|
|
39
44
|
def decrby( key, decrement ); super(zip_key(key), decrement) end
|
|
40
|
-
def set( key, value ); super( zip_key(key), value ) end
|
|
45
|
+
def set( key, value, **options ); super( zip_key(key), value, **options ) end
|
|
46
|
+
def ttl(key); super( zip_key(key) ) end
|
|
41
47
|
def mset( *key_values ); super( *key_values.each_slice(2).map{ |k,v| [zip_key(k),v] }.flatten ) end
|
|
42
48
|
def mget( *keys ); super( *keys.map!{ |k| zip_key(k) } ) end
|
|
43
49
|
|
data/lib/me_redis/zip_to_hash.rb
CHANGED
|
@@ -3,8 +3,8 @@ module MeRedis
|
|
|
3
3
|
module ZipToHash
|
|
4
4
|
|
|
5
5
|
module PrependMethods
|
|
6
|
-
def initialize(*args, &block)
|
|
7
|
-
super(*args, &block)
|
|
6
|
+
def initialize(*args, **kwargs, &block)
|
|
7
|
+
super(*args,**kwargs, &block)
|
|
8
8
|
|
|
9
9
|
# hash-max-ziplist-entries must be cashed, we can't ask Redis every time we need to zip keys,
|
|
10
10
|
# cause it's less performant and impossible during pipelining.
|
data/lib/me_redis/zip_values.rb
CHANGED
|
@@ -98,7 +98,7 @@ module MeRedis
|
|
|
98
98
|
|
|
99
99
|
# Redis prepended methods
|
|
100
100
|
def get( key ); unzip_value( super( key ), key) end
|
|
101
|
-
def set( key, value ); super( key, zip_value(value, key) ) end
|
|
101
|
+
def set( key, value, **options); super( key, zip_value(value, key), **options ) end
|
|
102
102
|
|
|
103
103
|
def mget(*args); unzip_arr_or_future(super(*args), args ) end
|
|
104
104
|
def mset(*args); super( *map_msets_arr(args) ) end
|
data/lib/me_redis.rb
CHANGED
|
@@ -17,17 +17,16 @@ require 'zlib'
|
|
|
17
17
|
module MeRedis
|
|
18
18
|
module ClassMethods
|
|
19
19
|
|
|
20
|
-
def configure( config
|
|
20
|
+
def configure( **config )
|
|
21
21
|
# at start they are nils, but at subsequent calls they may not be nils
|
|
22
22
|
me_config.key_zip_regxp = nil
|
|
23
23
|
me_config.compress_ns_regexp = nil
|
|
24
24
|
@zip_ns_finder = nil
|
|
25
25
|
|
|
26
|
-
config.each{ |key,value| me_config.send( "#{key}=", value ) } if config
|
|
26
|
+
config.each { |key,value| me_config.send( "#{key}=", value ) } if config
|
|
27
27
|
|
|
28
28
|
yield( me_config ) if block_given?
|
|
29
29
|
|
|
30
|
-
|
|
31
30
|
prepare_zip_crumbs
|
|
32
31
|
prepare_compressors
|
|
33
32
|
|
|
@@ -36,31 +35,37 @@ module MeRedis
|
|
|
36
35
|
end
|
|
37
36
|
|
|
38
37
|
def me_config
|
|
39
|
-
@me_config ||=
|
|
38
|
+
@me_config ||= OpenStruct.new(
|
|
40
39
|
# if set - configures Redis hash_max_ziplist_entries value,
|
|
41
40
|
# otherwise it will be filled from Redis hash-max-ziplist-value
|
|
42
|
-
:
|
|
41
|
+
hash_max_ziplist_entries: 512,
|
|
42
|
+
|
|
43
43
|
# same as above only for value, only resets it globally if present
|
|
44
|
-
:hash_max_ziplist_value,
|
|
44
|
+
# :hash_max_ziplist_value,
|
|
45
|
+
|
|
45
46
|
# array or hash or string/sym of key crumbs to zip, if a hash given it used as is,
|
|
46
47
|
# otherwise meredis tries to construct hash by using first char from each key + integer in base62 form for
|
|
47
48
|
# subsequent appearence of a crumb starting with same char
|
|
48
|
-
:zip_crumbs,
|
|
49
|
+
# :zip_crumbs,
|
|
50
|
+
|
|
49
51
|
# zip integers in keys to base62 form
|
|
50
|
-
:integers_to_base62,
|
|
52
|
+
# :integers_to_base62,
|
|
53
|
+
|
|
51
54
|
# regex composed from zip_crumbs keys and integer regexp if integers_to_base62 is set
|
|
52
|
-
:key_zip_regxp,
|
|
55
|
+
# :key_zip_regxp,
|
|
56
|
+
|
|
53
57
|
# prefixes/namespaces for keys need zipping,
|
|
54
58
|
# acceptable formats:
|
|
55
59
|
# 1. single string/sym will map it to defauilt compressor
|
|
56
60
|
# 2. array of string/syms will map it to defauilt compressor
|
|
57
61
|
# 3. hash maps different kinds of 1 and 2 to custom compressors
|
|
58
|
-
:compress_namespaces,
|
|
62
|
+
# :compress_namespaces,
|
|
63
|
+
|
|
59
64
|
# if configured than default_compressor used for compression of all keys matched and compress_namespaces is ignored
|
|
60
|
-
:compress_ns_regexp,
|
|
65
|
+
# :compress_ns_regexp,
|
|
61
66
|
|
|
62
|
-
:default_compressor
|
|
63
|
-
)
|
|
67
|
+
# :default_compressor
|
|
68
|
+
)
|
|
64
69
|
end
|
|
65
70
|
|
|
66
71
|
def zip_crumbs; me_config.zip_crumbs end
|
|
@@ -93,6 +98,7 @@ module MeRedis
|
|
|
93
98
|
|
|
94
99
|
def zip_ns_finder
|
|
95
100
|
return @zip_ns_finder if @zip_ns_finder
|
|
101
|
+
|
|
96
102
|
regexps_compress_ns = me_config.compress_namespaces.keys.select{|key| key.is_a?(Regexp) }
|
|
97
103
|
strs_compress_ns = me_config.compress_namespaces.keys.select{|key| !key.is_a?(Regexp) }
|
|
98
104
|
|
data/me-redis.gemspec
CHANGED
|
@@ -27,13 +27,13 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
28
28
|
spec.require_paths = ["lib"]
|
|
29
29
|
|
|
30
|
-
spec.add_dependency 'redis', '>= 3.0'
|
|
30
|
+
spec.add_dependency 'redis', '>= 3.0', '<= 4.5.1'
|
|
31
31
|
spec.add_dependency 'base62-rb'
|
|
32
32
|
spec.add_dependency "awesome_print"
|
|
33
33
|
|
|
34
|
-
spec.add_development_dependency "bundler", "~>
|
|
34
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
|
35
35
|
spec.add_development_dependency "rake", "~> 10.0"
|
|
36
36
|
spec.add_development_dependency "minitest"
|
|
37
|
-
spec.add_development_dependency "
|
|
37
|
+
spec.add_development_dependency "byebug", "~> 11.0.1"
|
|
38
38
|
|
|
39
39
|
end
|
data/ruby3.Dockerfile
ADDED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: me-redis
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- alekseyl
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-07-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: redis
|
|
@@ -17,6 +17,9 @@ dependencies:
|
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '3.0'
|
|
20
|
+
- - "<="
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: 4.5.1
|
|
20
23
|
type: :runtime
|
|
21
24
|
prerelease: false
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -24,6 +27,9 @@ dependencies:
|
|
|
24
27
|
- - ">="
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
26
29
|
version: '3.0'
|
|
30
|
+
- - "<="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 4.5.1
|
|
27
33
|
- !ruby/object:Gem::Dependency
|
|
28
34
|
name: base62-rb
|
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -58,14 +64,14 @@ dependencies:
|
|
|
58
64
|
requirements:
|
|
59
65
|
- - "~>"
|
|
60
66
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
67
|
+
version: '2.0'
|
|
62
68
|
type: :development
|
|
63
69
|
prerelease: false
|
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
71
|
requirements:
|
|
66
72
|
- - "~>"
|
|
67
73
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
74
|
+
version: '2.0'
|
|
69
75
|
- !ruby/object:Gem::Dependency
|
|
70
76
|
name: rake
|
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -95,19 +101,19 @@ dependencies:
|
|
|
95
101
|
- !ruby/object:Gem::Version
|
|
96
102
|
version: '0'
|
|
97
103
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
104
|
+
name: byebug
|
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
|
100
106
|
requirements:
|
|
101
|
-
- - "
|
|
107
|
+
- - "~>"
|
|
102
108
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
109
|
+
version: 11.0.1
|
|
104
110
|
type: :development
|
|
105
111
|
prerelease: false
|
|
106
112
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
113
|
requirements:
|
|
108
|
-
- - "
|
|
114
|
+
- - "~>"
|
|
109
115
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
116
|
+
version: 11.0.1
|
|
111
117
|
description: Enable to zip keys, zip values and replace simple storage key/value pairs
|
|
112
118
|
with hash storing
|
|
113
119
|
email:
|
|
@@ -137,12 +143,13 @@ files:
|
|
|
137
143
|
- lib/me_redis/zip_to_hash.rb
|
|
138
144
|
- lib/me_redis/zip_values.rb
|
|
139
145
|
- me-redis.gemspec
|
|
146
|
+
- ruby3.Dockerfile
|
|
140
147
|
homepage: https://github.com/alekseyl/me-redis
|
|
141
148
|
licenses:
|
|
142
149
|
- MIT
|
|
143
150
|
metadata:
|
|
144
151
|
allowed_push_host: https://rubygems.org
|
|
145
|
-
post_install_message:
|
|
152
|
+
post_install_message:
|
|
146
153
|
rdoc_options: []
|
|
147
154
|
require_paths:
|
|
148
155
|
- lib
|
|
@@ -157,9 +164,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
157
164
|
- !ruby/object:Gem::Version
|
|
158
165
|
version: '0'
|
|
159
166
|
requirements: []
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
signing_key:
|
|
167
|
+
rubygems_version: 3.2.15
|
|
168
|
+
signing_key:
|
|
163
169
|
specification_version: 4
|
|
164
170
|
summary: Memory efficient redis extention
|
|
165
171
|
test_files: []
|