Leaderboard:
bash
ZADD leaderboard 9500 'alice' # alice: 9500 điểm
ZADD leaderboard 8200 'bob'
ZRANGE leaderboard 0 9 REV WITHSCORES # top 10 giảm dần
ZRANK leaderboard 'alice' # rank của alice
ZINCRBY leaderboard 100 'alice' # tăng 100 điểmO(log N) cho mỗi update. Sliding Window Rate Limiter dùng Sorted Set:
python
# Key: ratelimit:user123, score = timestamp, member = unique_id
# (pseudocode - wrap in Lua script for atomicity in production)
ZADD ratelimit:user123 now() uuid()
ZREMRANGEBYSCORE ratelimit:user123 0 (now() - window)
count = ZCARD ratelimit:user123
if count > limit: reject
EXPIRE ratelimit:user123 windowTất cả thao tác này cần wrap trong Lua script để atomic.
- So với Fixed Window: Sliding Window chính xác hơn, không có boundary spike.
- Nhược điểm: tốn memory hơn (lưu timestamp từng request) — dùng ZSET với member là timestamp+uuid.