Skip to main content

RedisStore

Struct RedisStore 

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

Cloneable Redis client.

Cloning copies the prefix and an Arc inside [redis::aio::ConnectionManager]; it does not open another TCP connection. Commands issued on any clone share that multiplexed connection and the database selected by the URL.

Implementations§

Source§

impl RedisStore

Source

pub async fn incr_by_expire( &self, key: &str, by: i64, ttl: Duration, ) -> Result<i64, RedisError>

INCRBY plus an expiry for a key that has none, as one atomic server-side script.

A missing key starts at 0. The key receives ttl only when it has no expiry afterwards (it was created by this call, or was persistent); an existing deadline is kept. The two steps cannot be separated by an expiry or eviction, so the key is never left without a TTL.

§Errors

RedisError::Invalid when ttl is below 1ms or above i64::MAX / 2 milliseconds, before any command is sent. Otherwise connection or command errors (the value is not an integer, or it would overflow).

Source

pub async fn admit_marker( &self, args: MarkerAdmission<'_>, ) -> Result<MarkerReply, RedisError>

Admit a marker in one script: check the epoch, find or create the marker, and count the creation against the window’s budget.

The window is floor(server TIME / window), so every process agrees on it whatever its own clock says; the counter expires after twice the window on the same server clock. Nothing is created when the epoch differs or the budget is spent. The counter key is built inside the script, so this requires a single (non-cluster) deployment. The script enables effects replication itself where Redis needs it (before 7), so TIME followed by writes is accepted.

§Errors

RedisError::Invalid when window is below 1ms or above i64::MAX / 4 milliseconds, before any command is sent. Otherwise connection or command errors.

Source

pub async fn rotate_marker( &self, marker: &str, epoch_key: &str, epoch: &str, ttl: Duration, ) -> Result<(), RedisError>

Set epoch_key to epoch with a lifetime and delete marker, as one MULTI/EXEC round trip.

§Errors

RedisError::Invalid when ttl is below 1ms or above i64::MAX / 2 milliseconds. Otherwise connection or command errors.

Source§

impl RedisStore

Source

pub fn capabilities() -> BackendCapabilities

Capabilities of this adapter.

The value does not depend on a connection. Checking it never performs I/O.

Source

pub fn require(feature: Feature) -> Result<(), RedisError>

Reject feature when Redis cannot honour it.

No connection is used. Isolation levels, savepoints, joins, row locking and the other relational Features all fail here.

§Errors

RedisError::Capability when feature is not supported.

Source

pub async fn connect(url: &str) -> Result<Self, RedisError>

Open url (for example redis://127.0.0.1:6379/15) with an empty prefix.

The path selects the database. Database 15 is the one the live tests use.

§Errors

RedisError::Connection when the URL is invalid or the server cannot be reached.

Source

pub async fn connect_with( client: Client, config: ConnectionManagerConfig, ) -> Result<Self, RedisError>

Connect a configured client, including custom TLS trust roots.

Args: client: Driver client with transport, certificate and DB policy. config: Retry, timeout and multiplexed admission limits.

Returns: Connected store with an empty key prefix.

§Errors

Connection, authentication or certificate verification failure.

Source

pub fn with_prefix(&self, prefix: impl Into<String>) -> Self

Clone this client with prefix replacing the current namespace.

The prefix is concatenated in front of every logical key. It is not appended to the previous prefix. "app:" turns "user" into "app:user". An empty prefix stores logical keys unchanged.

Source

pub fn prefix(&self) -> &str

Namespace prepended to logical keys.

Source

pub fn key(&self, key: &str) -> String

Physical key stored in Redis for the logical key.

Source

pub fn database(&self) -> i64

Database index selected by the connection URL.

This is the index the client was configured with. It is not a live SELECT.

Source

pub async fn get(&self, key: &str) -> Result<Option<String>, RedisError>

GET. Ok(None) when the key is absent.

§Errors

Connection, command, or UTF-8 decode errors. A wrong-type key is a command error.

Source

pub async fn set( &self, key: &str, value: &str, ttl: Option<Duration>, ) -> Result<(), RedisError>

SET. ttl of None stores the key with no expiry and clears any previous one.

§Errors

RedisError::Invalid when ttl is below 1ms or above i64::MAX / 2 milliseconds, before any command is sent. Otherwise connection or command errors.

Source

pub async fn set_nx(&self, key: &str, value: &str) -> Result<bool, RedisError>

SET key value NX. Ok(true) when this call created the key.

An existing key is left unchanged, including its expiry. This form does not set a TTL; use set or expire, or a pipeline SET with NX and PX, when the new key must expire.

§Errors

Connection or command errors.

Source

pub async fn set_nx_px( &self, key: &str, value: &str, ttl: Duration, ) -> Result<bool, RedisError>

SET key value NX PX ms as one command. Ok(true) when this call created the key; an existing key keeps its value and expiry.

Creation and expiry are one atomic server step: no observer sees the key without its TTL, and dropping the returned future either sends the whole command or none of it. ttl is truncated to whole milliseconds.

§Errors

RedisError::Invalid when ttl is below 1ms or above i64::MAX / 2 milliseconds, before any command is sent. Otherwise connection or command errors.

Source

pub async fn del(&self, key: &str) -> Result<u64, RedisError>

DEL for one logical key. The number is 1 when the key was removed and 0 otherwise.

§Errors

Connection or command errors.

Source

pub async fn exists(&self, key: &str) -> Result<bool, RedisError>

EXISTS for one logical key.

§Errors

Connection or command errors.

Source

pub async fn expire(&self, key: &str, ttl: Duration) -> Result<bool, RedisError>

PEXPIRE. Ok(false) when the key does not exist.

§Errors

RedisError::Invalid when ttl is below 1ms or too large, before any command is sent. Otherwise connection or command errors.

Source

pub async fn ttl(&self, key: &str) -> Result<Ttl, RedisError>

PTTL.

§Errors

Connection or command errors, including an unexpected numeric reply.

Source

pub async fn incr_by(&self, key: &str, by: i64) -> Result<i64, RedisError>

INCRBY. Creates the key at zero first when it is absent. by may be negative.

§Errors

Connection or command errors (the value is not an integer, or it would overflow).

Source

pub async fn hget( &self, key: &str, field: &str, ) -> Result<Option<String>, RedisError>

HGET. Ok(None) when the key or field is absent.

§Errors

Connection, command, or UTF-8 decode errors.

Source

pub async fn hset( &self, key: &str, field: &str, value: &str, ) -> Result<u64, RedisError>

HSET of one field. Returns how many fields were newly created (0 when updated).

§Errors

Connection or command errors.

Source

pub async fn hset_many<I, F, V>( &self, key: &str, fields: I, ) -> Result<u64, RedisError>
where I: IntoIterator<Item = (F, V)>, F: AsRef<str>, V: AsRef<str>,

HSET of many fields in one command. Returns how many fields were newly created.

§Errors

RedisError::Invalid when fields is empty, before any command is sent. Otherwise connection or command errors.

Source

pub async fn hgetall( &self, key: &str, ) -> Result<HashMap<String, String>, RedisError>

HGETALL. An absent key is an empty map, which is how Redis replies.

Field order is not significant.

§Errors

Connection, command, or UTF-8 decode errors.

Source

pub async fn hdel<I, F>(&self, key: &str, fields: I) -> Result<u64, RedisError>
where I: IntoIterator<Item = F>, F: AsRef<str>,

HDEL. Returns how many of fields were removed.

§Errors

RedisError::Invalid when fields is empty, before any command is sent. Otherwise connection or command errors.

Source

pub async fn sadd<I, M>(&self, key: &str, members: I) -> Result<u64, RedisError>
where I: IntoIterator<Item = M>, M: AsRef<str>,

SADD. Returns how many of members were newly inserted.

§Errors

RedisError::Invalid when members is empty, before any command is sent. Otherwise connection or command errors.

Source

pub async fn srem<I, M>(&self, key: &str, members: I) -> Result<u64, RedisError>
where I: IntoIterator<Item = M>, M: AsRef<str>,

SREM. Returns how many of members were removed.

§Errors

RedisError::Invalid when members is empty, before any command is sent. Otherwise connection or command errors.

Source

pub async fn smembers(&self, key: &str) -> Result<HashSet<String>, RedisError>

SMEMBERS. An absent key is an empty set.

§Errors

Connection, command, or UTF-8 decode errors.

Source

pub async fn sismember( &self, key: &str, member: &str, ) -> Result<bool, RedisError>

SISMEMBER.

§Errors

Connection or command errors.

Source

pub async fn get_json<T>(&self, key: &str) -> Result<Option<T>, RedisError>

GET decoded as JSON. Ok(None) when the key is absent.

A stored JSON null is Ok(Some) when T accepts null, and a decode error when it does not.

§Errors

RedisError::Decode when the bytes are not UTF-8 or not JSON of type T. Connection and command errors from get.

Source

pub async fn set_json<T>( &self, key: &str, value: &T, ttl: Option<Duration>, ) -> Result<(), RedisError>
where T: Serialize,

SET of value encoded as compact JSON.

§Errors

RedisError::Invalid when value cannot be serialized or ttl is not acceptable, before any command is sent. Otherwise the errors of set.

Source

pub async fn pipeline<T, F>(&self, build: F) -> Result<T, RedisError>
where T: FromRedisValue, F: FnOnce(&mut Pipeline),

Run build inside one atomic MULTI/EXEC.

build receives a [redis::Pipeline] already switched to atomic mode. Keys are not prefixed for these raw commands: pass them through key. Replies decode as T, one element per command that was not ignored, in order.

Redis runs the queued commands with no other client’s commands interleaved. That is not a SQL transaction. A command that fails while EXEC is running does not roll back earlier commands in the same batch. A command Redis rejects while queueing (wrong arity, unknown command) aborts the whole batch, and none of it is applied. There are no savepoints and no isolation levels; ask require before building a pipeline that would need them.

§Errors

Connection or command errors, including EXECABORT and a reply shape T cannot decode.

Source

pub async fn delete_namespace(&self) -> Result<u64, RedisError>

Delete every key in this namespace with SCAN and DEL.

The match pattern is the prefix with glob metacharacters escaped, then *. An empty prefix is refused so this cannot wipe a database. This method never sends FLUSHDB or FLUSHALL.

§Errors

RedisError::Invalid when the prefix is empty, before any command is sent. Otherwise connection or command errors.

Trait Implementations§

Source§

impl Clone for RedisStore

Source§

fn clone(&self) -> RedisStore

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RedisStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

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

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