Bird
Raised Fist0
Redisquery~5 mins

Rate limiting with sliding window in Redis - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is rate limiting in the context of Redis?
Rate limiting is a technique to control how many times a user or client can perform an action in a given time period, preventing overload or abuse.
Click to reveal answer
intermediate
Explain the sliding window approach for rate limiting.
Sliding window rate limiting counts requests in a moving time window, allowing a smoother limit by considering recent activity rather than fixed intervals.
Click to reveal answer
intermediate
Which Redis data structure is commonly used to implement sliding window rate limiting?
Redis Sorted Sets are commonly used because they store timestamps with scores, allowing efficient range queries to count requests in a time window.
Click to reveal answer
intermediate
What is the main advantage of sliding window rate limiting over fixed window rate limiting?
Sliding window provides more accurate and fair limits by continuously counting requests over the recent time frame, avoiding bursts at window edges.
Click to reveal answer
advanced
Describe a simple Redis command sequence to implement sliding window rate limiting.
Use ZADD to add current timestamp, ZREMRANGEBYSCORE to remove old timestamps outside the window, and ZCOUNT to count requests in the window. If count is below limit, allow the request.
Click to reveal answer
Which Redis command adds a timestamp to a sorted set for sliding window rate limiting?
ALPUSH
BZADD
CHSET
DSADD
What does the sliding window technique help prevent compared to fixed window rate limiting?
AUsing sorted sets
BAny requests at all
CSudden bursts of requests at window edges
DStoring data in Redis
Which Redis command removes old timestamps outside the sliding window?
AZREMRANGEBYSCORE
BZCOUNT
CZCARD
DZRANGE
In sliding window rate limiting, what does the score in a Redis sorted set represent?
AUser ID
BIP address
CRequest count
DTimestamp of the request
Why is Redis suitable for implementing sliding window rate limiting?
AIt supports fast sorted set operations
BIt stores large files
CIt is a relational database
DIt only supports strings
Describe how you would implement sliding window rate limiting using Redis commands.
Think about adding timestamps and cleaning old ones to keep the window moving.
You got /4 concepts.
    Explain the benefits of sliding window rate limiting compared to fixed window rate limiting.
    Consider how counting requests continuously differs from counting in fixed chunks.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a sliding window in rate limiting with Redis?
      easy
      A. To count actions within a moving time frame for fair limits
      B. To store user passwords securely
      C. To permanently block users after one action
      D. To sort data alphabetically

      Solution

      1. Step 1: Understand sliding window concept

        Sliding window rate limiting counts actions in a recent time frame that moves forward as time passes.
      2. Step 2: Identify purpose in Redis context

        Redis uses sorted sets to track timestamps of actions to enforce limits fairly over time.
      3. Final Answer:

        To count actions within a moving time frame for fair limits -> Option A
      4. Quick Check:

        Sliding window = moving time frame count [OK]
      Hint: Sliding window means counting recent actions, not all time [OK]
      Common Mistakes:
      • Thinking sliding window blocks permanently
      • Confusing with password storage
      • Assuming it sorts data alphabetically
      2. Which Redis command is essential to add a timestamp to a sorted set for sliding window rate limiting?
      easy
      A. ZADD
      B. GET
      C. HSET
      D. LPUSH

      Solution

      1. Step 1: Identify command to add to sorted set

        ZADD adds members with scores (timestamps) to a sorted set in Redis.
      2. Step 2: Confirm other commands' purpose

        GET retrieves string values, HSET sets hash fields, LPUSH adds to lists, none add to sorted sets.
      3. Final Answer:

        ZADD -> Option A
      4. Quick Check:

        ZADD adds to sorted set [OK]
      Hint: Use ZADD to add timestamps to sorted sets [OK]
      Common Mistakes:
      • Using GET which only reads strings
      • Confusing HSET (hashes) with sorted sets
      • Using LPUSH which is for lists
      3. Given this Redis Lua script snippet for sliding window rate limiting:
      local now = tonumber(redis.call('TIME')[1])
      redis.call('ZREMRANGEBYSCORE', key, 0, now - window)
      local count = redis.call('ZCARD', key)
      if count < limit then
        redis.call('ZADD', key, now, now)
        return 1
      else
        return 0
      end

      What will be the return value if the current count is equal to the limit?
      medium
      A. 1
      B. nil
      C. 0
      D. An error

      Solution

      1. Step 1: Analyze the condition count < limit

        If count is equal to limit, the condition count < limit is false.
      2. Step 2: Determine return value when condition is false

        When false, the script returns 0, indicating rate limit reached.
      3. Final Answer:

        0 -> Option C
      4. Quick Check:

        count == limit returns 0 [OK]
      Hint: If count equals limit, return 0 (limit reached) [OK]
      Common Mistakes:
      • Assuming count == limit returns 1
      • Expecting an error instead of 0
      • Thinking nil is returned
      4. You have this Redis Lua script for sliding window rate limiting:
      local now = tonumber(redis.call('TIME')[1])
      redis.call('ZREMRANGEBYSCORE', key, 0, now - window)
      local count = redis.call('ZCARD', key)
      if count <= limit then
        redis.call('ZADD', key, now, now)
        return 1
      else
        return 0
      end

      What is the bug in this script?
      medium
      A. ZREMRANGEBYSCORE is used incorrectly
      B. Using <= allows one extra request beyond limit
      C. ZADD should use a string member, not number
      D. TIME command returns a string, not number

      Solution

      1. Step 1: Check condition count <= limit

        This condition allows adding a request when count equals limit, exceeding limit by one.
      2. Step 2: Verify other commands usage

        ZREMRANGEBYSCORE usage is correct to remove old timestamps; ZADD accepts numbers as members; TIME returns array with string seconds converted to number.
      3. Final Answer:

        Using <= allows one extra request beyond limit -> Option B
      4. Quick Check:

        count <= limit allows limit+1 requests [OK]
      Hint: Use < not <= to enforce strict limit [OK]
      Common Mistakes:
      • Thinking ZREMRANGEBYSCORE is wrong here
      • Believing ZADD can't use numbers as members
      • Confusing TIME return type
      5. You want to implement a sliding window rate limiter in Redis that allows 100 requests per 60 seconds. Which sequence of Redis commands best enforces this limit efficiently?
      hard
      A. HSET to store count, GET to read count, INCR to increment count
      B. LPUSH to add timestamp, LLEN to count, LTRIM to remove old timestamps
      C. SETNX to set a flag, EXPIRE to reset after 60 seconds
      D. ZREMRANGEBYSCORE to remove old timestamps, ZCARD to count, ZADD to add current timestamp

      Solution

      1. Step 1: Understand sliding window enforcement

        Use sorted sets to store timestamps, remove old ones, count current requests, and add new timestamp.
      2. Step 2: Evaluate each option's commands

        ZREMRANGEBYSCORE to remove old timestamps, ZCARD to count, ZADD to add current timestamp uses ZREMRANGEBYSCORE, ZCARD, ZADD correctly for sliding window. LPUSH to add timestamp, LLEN to count, LTRIM to remove old timestamps uses lists which are less efficient for range removals. HSET to store count, GET to read count, INCR to increment count uses hashes and counters, not suitable for sliding window. SETNX to set a flag, EXPIRE to reset after 60 seconds uses simple flags, not counting requests.
      3. Final Answer:

        ZREMRANGEBYSCORE, ZCARD, ZADD sequence -> Option D
      4. Quick Check:

        Sorted sets + remove old + count + add = correct [OK]
      Hint: Use sorted sets with ZREMRANGEBYSCORE, ZCARD, ZADD [OK]
      Common Mistakes:
      • Using lists which are inefficient for sliding windows
      • Using counters without timestamps
      • Using flags without counting requests
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard