kredis 1.3.0.1 → 1.5.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/README.md +8 -0
- data/lib/kredis/log_subscriber.rb +1 -1
- data/lib/kredis/migration.rb +2 -2
- data/lib/kredis/type/datetime.rb +2 -2
- data/lib/kredis/types/list.rb +4 -0
- data/lib/kredis/types/ordered_set.rb +75 -0
- data/lib/kredis/types/proxying.rb +8 -1
- data/lib/kredis/types/set.rb +10 -2
- data/lib/kredis/types/unique_list.rb +1 -1
- data/lib/kredis/types.rb +5 -0
- data/lib/kredis/version.rb +1 -1
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72d301175c0d6bac257d10d925bddcaaa4d9fda78f0aa75264fc3b6c5a8af677
|
4
|
+
data.tar.gz: aa7dd573678ca4f8bb18478cf6b606fe2afc3833e6c9b9bb9b693e361f7706ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e12490fc43dd3e73dcc39dfe3af5ab0f44405eae7a071b08edb14b1cba08c4b96bdb968af61072b2329e0f5e449c8c281252f4e32f423656d77bcc5ebf0e95e0
|
7
|
+
data.tar.gz: f047ac1e52365a7b25e10b2d2187df699abe34ced746f4d34b8e47511c019019eee3e9e6f69a5e46d58286a5ad5e38899d0db8517015d809b278ea46526f81b4
|
data/README.md
CHANGED
@@ -62,6 +62,14 @@ unique_list << "5" # => LREM myuniquelist 0, "5" + R
|
|
62
62
|
unique_list.remove(3) # => LREM myuniquelist 0, "3"
|
63
63
|
[ "4", "2", "1", "5" ] == unique_list.elements # => LRANGE myuniquelist 0, -1
|
64
64
|
|
65
|
+
ordered_set = Kredis.ordered_set "myorderedset"
|
66
|
+
ordered_set.append(%w[ 2 3 4 ]) # => ZADD myorderedset 1646131025.4953232 2 1646131025.495326 3 1646131025.4953272 4
|
67
|
+
ordered_set.prepend(%w[ 1 2 3 4 ]) # => ZADD myorderedset -1646131025.4957051 1 -1646131025.495707 2 -1646131025.4957082 3 -1646131025.4957092 4
|
68
|
+
ordered_set.append([])
|
69
|
+
ordered_set << "5" # => ZADD myorderedset 1646131025.4960442 5
|
70
|
+
ordered_set.remove(3) # => ZREM myorderedset 3
|
71
|
+
[ "4", "2", "1", "5" ] == ordered_set.elements # => ZRANGE myorderedset 0 -1
|
72
|
+
|
65
73
|
set = Kredis.set "myset", typed: :datetime
|
66
74
|
set.add(DateTime.tomorrow, DateTime.yesterday) # => SADD myset "2021-02-03 00:00:00 +0100" "2021-02-01 00:00:00 +0100"
|
67
75
|
set << DateTime.tomorrow # => SADD myset "2021-02-03 00:00:00 +0100"
|
@@ -15,7 +15,7 @@ class Kredis::LogSubscriber < ActiveSupport::LogSubscriber
|
|
15
15
|
|
16
16
|
private
|
17
17
|
def formatted_in(color, event, type: nil)
|
18
|
-
color " Kredis #{type} (#{event.duration.round(1)}ms) #{event.payload[:message]}", color, true
|
18
|
+
color " Kredis #{type} (#{event.duration.round(1)}ms) #{event.payload[:message]}", color, bold: true
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
data/lib/kredis/migration.rb
CHANGED
@@ -33,10 +33,10 @@ class Kredis::Migration
|
|
33
33
|
def delete_all(*key_patterns)
|
34
34
|
log_migration "DELETE ALL #{key_patterns.inspect}" do
|
35
35
|
if key_patterns.length > 1
|
36
|
-
@redis.del
|
36
|
+
@redis.del(*key_patterns)
|
37
37
|
else
|
38
38
|
each_key_batch_matching(key_patterns.first) do |keys, pipeline|
|
39
|
-
pipeline.del
|
39
|
+
pipeline.del(*keys)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
data/lib/kredis/type/datetime.rb
CHANGED
data/lib/kredis/types/list.rb
CHANGED
@@ -0,0 +1,75 @@
|
|
1
|
+
class Kredis::Types::OrderedSet < Kredis::Types::Proxying
|
2
|
+
proxying :multi, :zrange, :zrem, :zadd, :zremrangebyrank, :zcard, :exists?, :del
|
3
|
+
|
4
|
+
attr_accessor :typed
|
5
|
+
attr_reader :limit
|
6
|
+
|
7
|
+
def elements
|
8
|
+
strings_to_types(zrange(0, -1) || [], typed)
|
9
|
+
end
|
10
|
+
alias to_a elements
|
11
|
+
|
12
|
+
def remove(*elements)
|
13
|
+
zrem(types_to_strings(elements, typed))
|
14
|
+
end
|
15
|
+
|
16
|
+
def prepend(elements)
|
17
|
+
insert(elements, prepending: true)
|
18
|
+
end
|
19
|
+
|
20
|
+
def append(elements)
|
21
|
+
insert(elements)
|
22
|
+
end
|
23
|
+
alias << append
|
24
|
+
|
25
|
+
def limit=(limit)
|
26
|
+
raise "Limit must be greater than 0" if limit && limit <= 0
|
27
|
+
|
28
|
+
@limit = limit
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def insert(elements, prepending: false)
|
33
|
+
elements = Array(elements)
|
34
|
+
return if elements.empty?
|
35
|
+
|
36
|
+
elements_with_scores = types_to_strings(elements, typed).map.with_index do |element, index|
|
37
|
+
incremental_score = index * 0.000001
|
38
|
+
|
39
|
+
score = if prepending
|
40
|
+
-base_score - incremental_score
|
41
|
+
else
|
42
|
+
base_score + incremental_score
|
43
|
+
end
|
44
|
+
|
45
|
+
[ score , element ]
|
46
|
+
end
|
47
|
+
|
48
|
+
multi do
|
49
|
+
zadd(elements_with_scores)
|
50
|
+
trim(from_beginning: prepending)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def base_score
|
55
|
+
process_start_time + process_uptime
|
56
|
+
end
|
57
|
+
|
58
|
+
def process_start_time
|
59
|
+
@process_start_time ||= unproxied_redis.time.join(".").to_f - process_uptime
|
60
|
+
end
|
61
|
+
|
62
|
+
def process_uptime
|
63
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
64
|
+
end
|
65
|
+
|
66
|
+
def trim(from_beginning:)
|
67
|
+
return unless limit
|
68
|
+
|
69
|
+
if from_beginning
|
70
|
+
zremrangebyrank(limit, -1)
|
71
|
+
else
|
72
|
+
zremrangebyrank(0, -(limit + 1))
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -4,10 +4,11 @@ class Kredis::Types::Proxying
|
|
4
4
|
attr_accessor :proxy, :key
|
5
5
|
|
6
6
|
def self.proxying(*commands)
|
7
|
-
delegate
|
7
|
+
delegate(*commands, to: :proxy)
|
8
8
|
end
|
9
9
|
|
10
10
|
def initialize(redis, key, **options)
|
11
|
+
@redis = redis
|
11
12
|
@key = key
|
12
13
|
@proxy = Kredis::Types::Proxy.new(redis, key)
|
13
14
|
options.each { |key, value| send("#{key}=", value) }
|
@@ -17,6 +18,12 @@ class Kredis::Types::Proxying
|
|
17
18
|
proxy.suppress_failsafe_with(returning: returning, &block)
|
18
19
|
end
|
19
20
|
|
21
|
+
def unproxied_redis
|
22
|
+
# Generally, this should not be used. It's only here for the rare case where we need to
|
23
|
+
# call Redis commands that don't reference a key and don't want to be pipelined.
|
24
|
+
@redis
|
25
|
+
end
|
26
|
+
|
20
27
|
private
|
21
28
|
delegate :type_to_string, :string_to_type, :types_to_strings, :strings_to_types, to: :Kredis
|
22
29
|
end
|
data/lib/kredis/types/set.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Kredis::Types::Set < Kredis::Types::Proxying
|
2
|
-
proxying :smembers, :sadd, :srem, :multi, :del, :sismember, :scard, :spop, :exists
|
2
|
+
proxying :smembers, :sadd, :srem, :multi, :del, :sismember, :scard, :spop, :exists?, :srandmember
|
3
3
|
|
4
4
|
attr_accessor :typed
|
5
5
|
|
@@ -33,10 +33,18 @@ class Kredis::Types::Set < Kredis::Types::Proxying
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def take
|
36
|
-
spop
|
36
|
+
string_to_type(spop, typed)
|
37
37
|
end
|
38
38
|
|
39
39
|
def clear
|
40
40
|
del
|
41
41
|
end
|
42
|
+
|
43
|
+
def sample(count = nil)
|
44
|
+
if count.nil?
|
45
|
+
string_to_type(srandmember(count), typed)
|
46
|
+
else
|
47
|
+
strings_to_types(srandmember(count), typed)
|
48
|
+
end
|
49
|
+
end
|
42
50
|
end
|
data/lib/kredis/types.rb
CHANGED
@@ -71,6 +71,10 @@ module Kredis::Types
|
|
71
71
|
type_from(Set, config, key, after_change: after_change, typed: typed)
|
72
72
|
end
|
73
73
|
|
74
|
+
def ordered_set(key, typed: :string, limit: nil, config: :shared, after_change: nil)
|
75
|
+
type_from(OrderedSet, config, key, after_change: after_change, typed: typed, limit: limit)
|
76
|
+
end
|
77
|
+
|
74
78
|
def slot(key, config: :shared, after_change: nil)
|
75
79
|
type_from(Slots, config, key, after_change: after_change, available: 1)
|
76
80
|
end
|
@@ -99,4 +103,5 @@ require "kredis/types/hash"
|
|
99
103
|
require "kredis/types/list"
|
100
104
|
require "kredis/types/unique_list"
|
101
105
|
require "kredis/types/set"
|
106
|
+
require "kredis/types/ordered_set"
|
102
107
|
require "kredis/types/slots"
|
data/lib/kredis/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kredis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Timm Hansen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -25,6 +25,20 @@ dependencies:
|
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 6.0.0
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: activemodel
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 6.0.0
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 6.0.0
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
name: redis
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +101,7 @@ files:
|
|
87
101
|
- lib/kredis/types/flag.rb
|
88
102
|
- lib/kredis/types/hash.rb
|
89
103
|
- lib/kredis/types/list.rb
|
104
|
+
- lib/kredis/types/ordered_set.rb
|
90
105
|
- lib/kredis/types/proxy.rb
|
91
106
|
- lib/kredis/types/proxy/failsafe.rb
|
92
107
|
- lib/kredis/types/proxying.rb
|
@@ -115,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
130
|
- !ruby/object:Gem::Version
|
116
131
|
version: '0'
|
117
132
|
requirements: []
|
118
|
-
rubygems_version: 3.4.
|
133
|
+
rubygems_version: 3.4.10
|
119
134
|
signing_key:
|
120
135
|
specification_version: 4
|
121
136
|
summary: Higher-level data structures built on Redis.
|