Leaderboards
Use a sorted set when Redis should rank members by score.
import { zset, string } from "benni/schema";
export const leaderboards = zset("leaderboard", string());Record scores:
await redis.zset(leaderboards).zadd("weekly", [ { member: "user:42", score: 1200 }, { member: "user:7", score: 950 }]);Increment a score:
await redis.zset(leaderboards).zincrby("weekly", 25, "user:42");Read the top 10:
const top = await redis .zset(leaderboards) .zrange("weekly", { start: 0, stop: 9, rev: true });Read scores with members:
const ranked = await redis .zset(leaderboards) .zrange("weekly", { start: 0, stop: 9, withScores: true });Raw Redis equivalent:
await nodeRedis.zIncrBy("leaderboard:weekly", 25, "user:42");const top = await nodeRedis.zRange("leaderboard:weekly", 0, 9, { REV: true});