class SpaceSaver
Public Class Methods
new(redis, k)
click to toggle source
# File lib/space-saver-redis.rb, line 2 def initialize(redis, k) @redis = redis @k = k end
Public Instance Methods
increment(leaderboard, value)
click to toggle source
# File lib/space-saver-redis.rb, line 7 def increment(leaderboard, value) score = @redis.zscore(leaderboard, value) if score || @redis.zcard(leaderboard) < @k @redis.zincrby(leaderboard, 1, value) else item, score = @redis.zrange(leaderboard, 0, 0, withscores: true).first new_score = score.to_i + 1 @redis.zadd(leaderboard, new_score, value) if @redis.zrem(leaderboard, item) new_score end end
leaders(leaderboard, k=@k)
click to toggle source
# File lib/space-saver-redis.rb, line 19 def leaders(leaderboard, k=@k) @redis.zrevrange(leaderboard, 0, k-1, withscores: true) end
reset(leaderboard)
click to toggle source
# File lib/space-saver-redis.rb, line 23 def reset(leaderboard) @redis.del(leaderboard) end