Class: Familia::SortedSet
- Inherits:
-
DataType
show all
- Defined in:
- lib/familia/data_type/types/sorted_set.rb
Instance Attribute Summary
Attributes inherited from DataType
#dump_method, #keystring, #load_method, #opts, #parent
Attributes included from Features
#features_enabled
Instance Method Summary
collapse
-
#<<(val) ⇒ Integer
Adds a new element to the sorted set with the current timestamp as the score.
-
#[]=(val, score) ⇒ Object
NOTE: The argument order is the reverse of #add.
-
#add(score, val) ⇒ Object
-
#at(idx) ⇒ Object
-
#collect ⇒ Object
-
#collectraw ⇒ Object
-
#decrement(val, by = 1) ⇒ Object
(also: #decr, #decrby)
-
#each ⇒ Object
-
#each_with_index ⇒ Object
-
#eachraw ⇒ Object
-
#eachraw_with_index ⇒ Object
-
#element_count ⇒ Integer
(also: #size)
Returns the number of elements in the sorted set.
-
#empty? ⇒ Boolean
-
#first ⇒ Object
Return the first element in the list.
-
#increment(val, by = 1) ⇒ Object
(also: #incr, #incrby)
-
#last ⇒ Object
Return the last element in the list.
-
#member?(val) ⇒ Boolean
(also: #include?)
-
#members(count = -1,, opts = {}) ⇒ Object
(also: #to_a, #all)
-
#membersraw(count = -1,, opts = {}) ⇒ Object
-
#range(sidx, eidx, opts = {}) ⇒ Object
-
#rangebyscore(sscore, escore, opts = {}) ⇒ Object
-
#rangebyscoreraw(sscore, escore, opts = {}) ⇒ Object
-
#rangeraw(sidx, eidx, opts = {}) ⇒ Object
-
#rank(v) ⇒ Object
rank of member +v+ when ordered lowest to highest (starts at 0).
-
#remove_element(value) ⇒ Integer
(also: #remove)
Removes a member from the sorted set.
-
#remrangebyrank(srank, erank) ⇒ Object
-
#remrangebyscore(sscore, escore) ⇒ Object
-
#revmembers(count = -1,, opts = {}) ⇒ Object
-
#revmembersraw(count = -1,, opts = {}) ⇒ Object
-
#revrange(sidx, eidx, opts = {}) ⇒ Object
-
#revrangebyscore(sscore, escore, opts = {}) ⇒ Object
-
#revrangebyscoreraw(sscore, escore, opts = {}) ⇒ Object
-
#revrangeraw(sidx, eidx, opts = {}) ⇒ Object
-
#revrank(v) ⇒ Object
rank of member +v+ when ordered highest to lowest (starts at 0).
-
#score(val) ⇒ Object
(also: #[])
-
#select ⇒ Object
-
#selectraw ⇒ Object
Methods inherited from DataType
#class?, #dbclient, #dbkey, #initialize, #logical_database, #parent?, #parent_class?, #parent_instance?, #uri
Methods included from Features
#feature
#has_relations?, #inherited, #logical_database, #register, #uri, #valid_keys_only
#deserialize_value, #deserialize_values, #deserialize_values_with_nil, #serialize_value
#current_expiration, #delete!, #echo, #exists?, #expire, #expireat, #move, #persist, #rename, #renamenx, #type
Methods included from Base
add_feature, #generate_id, #to_s, #update_expiration, #uuid
Instance Method Details
#<<(val) ⇒ Integer
Note:
This is a non-standard operation for sorted sets as it doesn’t allow
specifying a custom score. Use add
or []=
for more control.
Adds a new element to the sorted set with the current timestamp as the
score.
This method provides a convenient way to add elements to the sorted set
without explicitly specifying a score. It uses the current Unix timestamp
as the score, which effectively sorts elements by their insertion time.
33
34
35
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 33
def <<(val)
add(Time.now.to_i, val)
end
|
#[]=(val, score) ⇒ Object
NOTE: The argument order is the reverse of #add. We do this to
more naturally align with how the [] and []= methods are used.
e.g.
obj.metrics[VALUE] = SCORE
obj.metrics[VALUE] # => SCORE
44
45
46
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 44
def []=(val, score)
add score, val
end
|
#add(score, val) ⇒ Object
48
49
50
51
52
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 48
def add(score, val)
ret = dbclient.zadd dbkey, score, serialize_value(val)
update_expiration
ret
end
|
#at(idx) ⇒ Object
220
221
222
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 220
def at(idx)
range(idx, idx).first
end
|
#collect ⇒ Object
110
111
112
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 110
def collect(&)
members.collect(&)
end
|
#collectraw ⇒ Object
126
127
128
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 126
def collectraw(&)
membersraw.collect(&)
end
|
#decrement(val, by = 1) ⇒ Object
Also known as:
decr, decrby
200
201
202
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 200
def decrement(val, by = 1)
increment val, -by
end
|
#each ⇒ Object
102
103
104
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 102
def each(&)
members.each(&)
end
|
#each_with_index ⇒ Object
106
107
108
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 106
def each_with_index(&)
members.each_with_index(&)
end
|
#eachraw ⇒ Object
118
119
120
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 118
def eachraw(&)
membersraw.each(&)
end
|
#eachraw_with_index ⇒ Object
122
123
124
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 122
def eachraw_with_index(&)
membersraw.each_with_index(&)
end
|
#element_count ⇒ Integer
Also known as:
size
Returns the number of elements in the sorted set
7
8
9
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 7
def element_count
dbclient.zcard dbkey
end
|
#empty? ⇒ Boolean
12
13
14
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 12
def empty?
element_count.zero?
end
|
#first ⇒ Object
Return the first element in the list. Redis: ZRANGE(0)
225
226
227
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 225
def first
at(0)
end
|
#increment(val, by = 1) ⇒ Object
Also known as:
incr, incrby
194
195
196
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 194
def increment(val, by = 1)
dbclient.zincrby(dbkey, by, val).to_i
end
|
#last ⇒ Object
Return the last element in the list. Redis: ZRANGE(-1)
230
231
232
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 230
def last
at(-1)
end
|
#member?(val) ⇒ Boolean
Also known as:
include?
60
61
62
63
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 60
def member?(val)
Familia.trace :MEMBER, dbclient, "#{val}<#{val.class}>", caller(1..1) if Familia.debug?
!rank(val).nil?
end
|
#members(count = -1,, opts = {}) ⇒ Object
Also known as:
to_a, all
78
79
80
81
82
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 78
def members(count = -1, opts = {})
count -= 1 if count.positive?
elements = membersraw count, opts
deserialize_values(*elements)
end
|
#membersraw(count = -1,, opts = {}) ⇒ Object
86
87
88
89
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 86
def membersraw(count = -1, opts = {})
count -= 1 if count.positive?
rangeraw 0, count, opts
end
|
#range(sidx, eidx, opts = {}) ⇒ Object
134
135
136
137
138
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 134
def range(sidx, eidx, opts = {})
echo :range, caller(1..1).first if Familia.debug
elements = rangeraw(sidx, eidx, opts)
deserialize_values(*elements)
end
|
#rangebyscore(sscore, escore, opts = {}) ⇒ Object
e.g. obj.metrics.rangebyscore (now-12.hours), now, :limit => [0, 10]
162
163
164
165
166
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 162
def rangebyscore(sscore, escore, opts = {})
echo :rangebyscore, caller(1..1).first if Familia.debug
elements = rangebyscoreraw(sscore, escore, opts)
deserialize_values(*elements)
end
|
#rangebyscoreraw(sscore, escore, opts = {}) ⇒ Object
168
169
170
171
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 168
def rangebyscoreraw(sscore, escore, opts = {})
echo :rangebyscoreraw, caller(1..1).first if Familia.debug
dbclient.zrangebyscore(dbkey, sscore, escore, **opts)
end
|
#rangeraw(sidx, eidx, opts = {}) ⇒ Object
140
141
142
143
144
145
146
147
148
149
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 140
def rangeraw(sidx, eidx, opts = {})
dbclient.zrange(dbkey, sidx, eidx, **opts)
end
|
#rank(v) ⇒ Object
rank of member +v+ when ordered lowest to highest (starts at 0)
67
68
69
70
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 67
def rank(v)
ret = dbclient.zrank dbkey, serialize_value(v, strict_values: false)
ret&.to_i
end
|
#remove_element(value) ⇒ Integer
Also known as:
remove
Removes a member from the sorted set
209
210
211
212
213
214
215
216
217
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 209
def remove_element(value)
Familia.trace :REMOVE_ELEMENT, dbclient, "#{value}<#{value.class}>", caller(1..1) if Familia.debug?
dbclient.zrem dbkey, serialize_value(value, strict_values: false)
end
|
#remrangebyrank(srank, erank) ⇒ Object
186
187
188
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 186
def remrangebyrank(srank, erank)
dbclient.zremrangebyrank dbkey, srank, erank
end
|
#remrangebyscore(sscore, escore) ⇒ Object
190
191
192
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 190
def remrangebyscore(sscore, escore)
dbclient.zremrangebyscore dbkey, sscore, escore
end
|
#revmembers(count = -1,, opts = {}) ⇒ Object
91
92
93
94
95
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 91
def revmembers(count = -1, opts = {})
count -= 1 if count.positive?
elements = revmembersraw count, opts
deserialize_values(*elements)
end
|
#revmembersraw(count = -1,, opts = {}) ⇒ Object
97
98
99
100
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 97
def revmembersraw(count = -1, opts = {})
count -= 1 if count.positive?
revrangeraw 0, count, opts
end
|
#revrange(sidx, eidx, opts = {}) ⇒ Object
151
152
153
154
155
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 151
def revrange(sidx, eidx, opts = {})
echo :revrange, caller(1..1).first if Familia.debug
elements = revrangeraw(sidx, eidx, opts)
deserialize_values(*elements)
end
|
#revrangebyscore(sscore, escore, opts = {}) ⇒ Object
e.g. obj.metrics.revrangebyscore (now-12.hours), now, :limit => [0, 10]
174
175
176
177
178
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 174
def revrangebyscore(sscore, escore, opts = {})
echo :revrangebyscore, caller(1..1).first if Familia.debug
elements = revrangebyscoreraw(sscore, escore, opts)
deserialize_values(*elements)
end
|
#revrangebyscoreraw(sscore, escore, opts = {}) ⇒ Object
180
181
182
183
184
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 180
def revrangebyscoreraw(sscore, escore, opts = {})
echo :revrangebyscoreraw, caller(1..1).first if Familia.debug
opts[:with_scores] = true if opts[:withscores]
dbclient.zrevrangebyscore(dbkey, sscore, escore, opts)
end
|
#revrangeraw(sidx, eidx, opts = {}) ⇒ Object
157
158
159
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 157
def revrangeraw(sidx, eidx, opts = {})
dbclient.zrevrange(dbkey, sidx, eidx, **opts)
end
|
#revrank(v) ⇒ Object
rank of member +v+ when ordered highest to lowest (starts at 0)
73
74
75
76
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 73
def revrank(v)
ret = dbclient.zrevrank dbkey, serialize_value(v, strict_values: false)
ret&.to_i
end
|
#score(val) ⇒ Object
Also known as:
[]
54
55
56
57
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 54
def score(val)
ret = dbclient.zscore dbkey, serialize_value(val, strict_values: false)
ret&.to_f
end
|
#select ⇒ Object
114
115
116
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 114
def select(&)
members.select(&)
end
|
#selectraw ⇒ Object
130
131
132
|
# File 'lib/familia/data_type/types/sorted_set.rb', line 130
def selectraw(&)
membersraw.select(&)
end
|