wedb_embed 0.1.1

Embedded database engine providing Redis-like APIs, built on fjall / 嵌入式数据库引擎,提供类似 Redis 的接口,底层基于 fjall 开发
Documentation
use crate::error::Result;
use crate::string::conf::Set;
use crate::zset::RangeScoreSpec;

/// 键值与字符串操作接口
pub trait KvOps {
    fn get(&self, key: impl AsRef<[u8]>) -> Result<Option<Vec<u8>>>;
    fn set<'a>(
        &self,
        key: impl AsRef<[u8]>,
        val: impl AsRef<[u8]>,
        opts: impl AsRef<[Set<'a>]>,
    ) -> Result<()>;
    fn set_ex(&self, key: impl AsRef<[u8]>, val: impl AsRef<[u8]>, expire_ms: u64) -> Result<()>;
    fn incr(&self, key: impl AsRef<[u8]>) -> Result<i64>;
    fn incrby(&self, key: impl AsRef<[u8]>, step: i64) -> Result<i64>;
    fn decr(&self, key: impl AsRef<[u8]>) -> Result<i64>;
    fn decrby(&self, key: impl AsRef<[u8]>, step: i64) -> Result<i64>;
    fn strlen(&self, key: impl AsRef<[u8]>) -> Result<usize>;
    fn getdel(&self, key: impl AsRef<[u8]>) -> Result<Option<Vec<u8>>>;
    fn getset(&self, key: impl AsRef<[u8]>, val: impl AsRef<[u8]>) -> Result<Option<Vec<u8>>>;
    fn mget<K: AsRef<[u8]>>(&self, keys: &[K]) -> Result<Vec<Option<Vec<u8>>>>;
    fn mset<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, kvs: &[(K, V)]) -> Result<()>;
}

/// 哈希结构操作接口
pub trait HashOps {
    fn hget(&self, key: impl AsRef<[u8]>, field: impl AsRef<[u8]>) -> Result<Option<Vec<u8>>>;
    fn hset<K: AsRef<[u8]>, F: AsRef<[u8]>, V: AsRef<[u8]>>(
        &self,
        key: K,
        fields: &[(F, V)],
    ) -> Result<usize>;
    fn hdel<K: AsRef<[u8]>, F: AsRef<[u8]>>(&self, key: K, fields: &[F]) -> Result<usize>;
    fn hexists(&self, key: impl AsRef<[u8]>, field: impl AsRef<[u8]>) -> Result<bool>;
    fn hlen(&self, key: impl AsRef<[u8]>) -> Result<usize>;
    fn hgetall(&self, key: impl AsRef<[u8]>) -> Result<Vec<(Vec<u8>, Vec<u8>)>>;
    fn hkeys(&self, key: impl AsRef<[u8]>) -> Result<Vec<Vec<u8>>>;
    fn hvals(&self, key: impl AsRef<[u8]>) -> Result<Vec<Vec<u8>>>;
    fn hincrby(&self, key: impl AsRef<[u8]>, field: impl AsRef<[u8]>, step: i64) -> Result<i64>;
    fn hincrbyfloat(
        &self,
        key: impl AsRef<[u8]>,
        field: impl AsRef<[u8]>,
        step: f64,
    ) -> Result<f64>;
    fn hmget<K: AsRef<[u8]>, F: AsRef<[u8]>>(
        &self,
        key: K,
        fields: &[F],
    ) -> Result<Vec<Option<Vec<u8>>>>;
    fn hmset<K: AsRef<[u8]>, F: AsRef<[u8]>, V: AsRef<[u8]>>(
        &self,
        key: K,
        fields: &[(F, V)],
    ) -> Result<()>;
    fn hstrlen(&self, key: impl AsRef<[u8]>, field: impl AsRef<[u8]>) -> Result<usize>;
}

/// 列表结构操作接口
pub trait ListOps {
    fn lpush<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, values: &[V]) -> Result<u64>;
    fn rpush<K: AsRef<[u8]>, V: AsRef<[u8]>>(&self, key: K, values: &[V]) -> Result<u64>;
    fn lpop(&self, key: impl AsRef<[u8]>, count: usize) -> Result<Vec<Vec<u8>>>;
    fn rpop(&self, key: impl AsRef<[u8]>, count: usize) -> Result<Vec<Vec<u8>>>;
    fn llen(&self, key: impl AsRef<[u8]>) -> Result<u64>;
    fn lindex(&self, key: impl AsRef<[u8]>, index: i64) -> Result<Option<Vec<u8>>>;
    fn lrange(&self, key: impl AsRef<[u8]>, start: i64, stop: i64) -> Result<Vec<Vec<u8>>>;
    fn ltrim(&self, key: impl AsRef<[u8]>, start: i64, stop: i64) -> Result<()>;
    fn lset(&self, key: impl AsRef<[u8]>, index: i64, value: impl AsRef<[u8]>) -> Result<()>;
}

/// 集合结构操作接口
pub trait SetOps {
    fn sadd<K: AsRef<[u8]>, M: AsRef<[u8]>>(&self, key: K, members: &[M]) -> Result<usize>;
    fn srem<K: AsRef<[u8]>, M: AsRef<[u8]>>(&self, key: K, members: &[M]) -> Result<usize>;
    fn smembers(&self, key: impl AsRef<[u8]>) -> Result<Vec<Vec<u8>>>;
    fn sismember(&self, key: impl AsRef<[u8]>, member: impl AsRef<[u8]>) -> Result<bool>;
    fn scard(&self, key: impl AsRef<[u8]>) -> Result<u64>;
    fn spop(&self, key: impl AsRef<[u8]>, count: usize) -> Result<Vec<Vec<u8>>>;
}

/// 有序集合结构操作接口
pub trait ZSetOps {
    fn zadd<K: AsRef<[u8]>, M: AsRef<[u8]>>(&self, key: K, members: &[(f64, M)]) -> Result<usize>;
    fn zrem<K: AsRef<[u8]>, M: AsRef<[u8]>>(&self, key: K, members: &[M]) -> Result<usize>;
    fn zscore(&self, key: impl AsRef<[u8]>, member: impl AsRef<[u8]>) -> Result<Option<f64>>;
    fn zcard(&self, key: impl AsRef<[u8]>) -> Result<u64>;
    fn zrank(&self, key: impl AsRef<[u8]>, member: impl AsRef<[u8]>) -> Result<Option<u64>>;
    fn zrevrank(&self, key: impl AsRef<[u8]>, member: impl AsRef<[u8]>) -> Result<Option<u64>>;
    fn zrange(&self, key: impl AsRef<[u8]>, start: i64, stop: i64) -> Result<Vec<(Vec<u8>, f64)>>;
    fn zcount(&self, key: impl AsRef<[u8]>, spec: &RangeScoreSpec) -> Result<u64>;
    fn zincrby(&self, key: impl AsRef<[u8]>, step: f64, member: impl AsRef<[u8]>) -> Result<f64>;
}