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
impl RedisStore
Sourcepub async fn incr_by_expire(
&self,
key: &str,
by: i64,
ttl: Duration,
) -> Result<i64, RedisError>
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).
Sourcepub async fn admit_marker(
&self,
args: MarkerAdmission<'_>,
) -> Result<MarkerReply, RedisError>
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.
Sourcepub async fn rotate_marker(
&self,
marker: &str,
epoch_key: &str,
epoch: &str,
ttl: Duration,
) -> Result<(), RedisError>
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
impl RedisStore
Sourcepub fn capabilities() -> BackendCapabilities
pub fn capabilities() -> BackendCapabilities
Capabilities of this adapter.
The value does not depend on a connection. Checking it never performs I/O.
Sourcepub fn require(feature: Feature) -> Result<(), RedisError>
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.
Sourcepub async fn connect(url: &str) -> Result<Self, RedisError>
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.
Sourcepub async fn connect_with(
client: Client,
config: ConnectionManagerConfig,
) -> Result<Self, RedisError>
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.
Sourcepub fn with_prefix(&self, prefix: impl Into<String>) -> Self
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.
Sourcepub fn database(&self) -> i64
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.
Sourcepub async fn get(&self, key: &str) -> Result<Option<String>, RedisError>
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.
Sourcepub async fn set(
&self,
key: &str,
value: &str,
ttl: Option<Duration>,
) -> Result<(), RedisError>
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.
Sourcepub async fn set_nx_px(
&self,
key: &str,
value: &str,
ttl: Duration,
) -> Result<bool, RedisError>
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.
Sourcepub async fn del(&self, key: &str) -> Result<u64, RedisError>
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.
Sourcepub async fn expire(&self, key: &str, ttl: Duration) -> Result<bool, RedisError>
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.
Sourcepub async fn incr_by(&self, key: &str, by: i64) -> Result<i64, RedisError>
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).
Sourcepub async fn hget(
&self,
key: &str,
field: &str,
) -> Result<Option<String>, RedisError>
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.
Sourcepub async fn hset(
&self,
key: &str,
field: &str,
value: &str,
) -> Result<u64, RedisError>
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.
Sourcepub async fn hset_many<I, F, V>(
&self,
key: &str,
fields: I,
) -> Result<u64, RedisError>
pub async fn hset_many<I, F, V>( &self, key: &str, fields: I, ) -> Result<u64, RedisError>
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.
Sourcepub async fn hgetall(
&self,
key: &str,
) -> Result<HashMap<String, String>, RedisError>
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.
Sourcepub async fn hdel<I, F>(&self, key: &str, fields: I) -> Result<u64, RedisError>
pub async fn hdel<I, F>(&self, key: &str, fields: I) -> Result<u64, RedisError>
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.
Sourcepub async fn sadd<I, M>(&self, key: &str, members: I) -> Result<u64, RedisError>
pub async fn sadd<I, M>(&self, key: &str, members: I) -> Result<u64, RedisError>
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.
Sourcepub async fn srem<I, M>(&self, key: &str, members: I) -> Result<u64, RedisError>
pub async fn srem<I, M>(&self, key: &str, members: I) -> Result<u64, RedisError>
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.
Sourcepub async fn get_json<T>(&self, key: &str) -> Result<Option<T>, RedisError>where
T: DeserializeOwned,
pub async fn get_json<T>(&self, key: &str) -> Result<Option<T>, RedisError>where
T: DeserializeOwned,
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.
Sourcepub async fn set_json<T>(
&self,
key: &str,
value: &T,
ttl: Option<Duration>,
) -> Result<(), RedisError>where
T: Serialize,
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.
Sourcepub async fn pipeline<T, F>(&self, build: F) -> Result<T, RedisError>where
T: FromRedisValue,
F: FnOnce(&mut Pipeline),
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.
Sourcepub async fn delete_namespace(&self) -> Result<u64, RedisError>
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
impl Clone for RedisStore
Source§fn clone(&self) -> RedisStore
fn clone(&self) -> RedisStore
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for RedisStore
impl !UnwindSafe for RedisStore
impl Freeze for RedisStore
impl Send for RedisStore
impl Sync for RedisStore
impl Unpin for RedisStore
impl UnsafeUnpin for RedisStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.