-
Notifications
You must be signed in to change notification settings - Fork 82
Open
Description
We use an ordered set for registering heartbeats of devices connected to our backend via websockets. Discovering that Kredis stores scores as float timestamps, I realized I could use ZRANGE
to retrieve device IDs that have either recent or stale heartbeat:
heartbeats = Kredis.ordered_set("devices:heartbeats")
heartbeats.zrange("-inf", 1.minute.ago.to_f, byscore: true) # returns device IDs with stale heartbeat
heartbeats.zrange(1.minute.ago.to_f, "+inf", byscore: true) # returns device IDs with recent heartbeat
I recently created a helper method that accepts a time range to make this easier:
def heartbeat_ids(range)
from = range.begin&.to_f || "-inf"
to = range.end&.to_f || "+inf"
heartbeats = Kredis.ordered_set("devices:heartbeats")
heartbeats.zrange(from, to, byscore: true)
end
heartbeat_ids(...1.minute.ago) # stale heartbeats
heartbeat_ids(1.minute.ago..) # recent heartbeats
I was wondering whether there is interest in adding a similar method to Kredis::OrderedSet
, or make #elements
accept an optional time range.
Metadata
Metadata
Assignees
Labels
No labels