Skip to main content

RedisRateLimiter

Struct RedisRateLimiter 

Source
pub struct RedisRateLimiter { /* private fields */ }
Expand description

RateLimiter over Redis: each allowed request ZADDs now into the key’s sorted set; a request is allowed while the set holds fewer than limit members within the trailing window.

§Differences from the Workers Rate Limiting binding (documented,

not papered over)

Workers Rate Limiting bindingRedisRateLimiter
Algorithmfixed-window counter (limit + period per binding, configured in wrangler.toml)sliding window: a request at the window’s edge does not get a fresh full budget immediately
retry_afterthe binding exposes none — the port’s Decision::retry_after is always None on WorkersSome: milliseconds until the oldest counted request exits the window, so callers can send an honest Retry-After
Where the limit livesthe binding declaration (per Worker)config keys RATE_LIMIT_MAX / RATE_LIMIT_PERIOD_SECS, one budget shared by every module — the same “one venture, one budget per subject” the shared binding gives
Scopecounters are per-Cloudflare-edgeone Redis: exact across every process and replica that shares it, and a single point of failure
Key spacethe binding’s ownrl:-prefixed in the database shared with RedisKv

Duration-granularity windows are kept whole: the script works in milliseconds.

Implementations§

Source§

impl RedisRateLimiter

Source

pub fn new(conn: ConnectionManager, limit: u64, window: Duration) -> Self

Source

pub fn from_env(conn: ConnectionManager, config: &dyn Config) -> Self

RATE_LIMIT_MAX (default 100) and RATE_LIMIT_PERIOD_SECS (default 60) from config.

Trait Implementations§

Source§

impl RateLimiter for RedisRateLimiter

Source§

fn limit<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Decision, RateLimitError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more