redis-on-mysql 0.0.1

A Redis-compatible proxy that stores all data and Pub/Sub state in MySQL
Documentation
mod auth;
mod basic;
mod bitfield;
mod bitmap;
mod cluster;
mod connection;
mod generic;
mod geo;
mod hash;
mod hll;
mod list;
mod pubsub;
mod set;
mod strings;
mod ttl;
mod util;
mod zset;

use resp_async::Router;

use crate::state::AppState;

/// Build the RESP router for supported Redis commands.
pub fn build_router(state: AppState) -> Router<AppState> {
    Router::from_state(state)
        .route("PING", basic::ping)
        .route("QUIT", basic::quit)
        .route("AUTH", auth::auth)
        .route("ECHO", connection::echo)
        .route("SELECT", connection::select)
        .route("CLIENT", connection::client)
        .route("GET", strings::get)
        .route("SET", strings::set)
        .route("SETNX", strings::setnx)
        .route("SETEX", strings::setex)
        .route("PSETEX", strings::psetex)
        .route("INCR", strings::incr)
        .route("DECR", strings::decr)
        .route("DEL", strings::del)
        .route("EXISTS", strings::exists)
        .route("EXPIRE", ttl::expire)
        .route("PEXPIRE", ttl::pexpire)
        .route("EXPIREAT", ttl::expireat)
        .route("PEXPIREAT", ttl::pexpireat)
        .route("PERSIST", ttl::persist)
        .route("TTL", ttl::ttl)
        .route("PTTL", ttl::pttl)
        .route("TYPE", generic::type_cmd)
        .route("KEYS", generic::keys)
        .route("SCAN", generic::scan)
        .route("RANDOMKEY", generic::randomkey)
        .route("RENAME", generic::rename)
        .route("RENAMENX", generic::renamenx)
        .route("DBSIZE", generic::dbsize)
        .route("FLUSHDB", generic::flushdb)
        .route("FLUSHALL", generic::flushall)
        .route("UNLINK", generic::unlink)
        .route("CLUSTER", cluster::cluster)
        .route("READONLY", cluster::readonly)
        .route("READWRITE", cluster::readwrite)
        .route("ASKING", cluster::asking)
        .route("HSET", hash::hset)
        .route("HMSET", hash::hset)
        .route("HSETNX", hash::hsetnx)
        .route("HGET", hash::hget)
        .route("HMGET", hash::hmget)
        .route("HGETALL", hash::hgetall)
        .route("HKEYS", hash::hkeys)
        .route("HVALS", hash::hvals)
        .route("HEXISTS", hash::hexists)
        .route("HDEL", hash::hdel)
        .route("HLEN", hash::hlen)
        .route("HSTRLEN", hash::hstrlen)
        .route("HINCRBY", hash::hincrby)
        .route("HINCRBYFLOAT", hash::hincrbyfloat)
        .route("HRANDFIELD", hash::hrandfield)
        .route("HSCAN", hash::hscan)
        .route("SADD", set::sadd)
        .route("SREM", set::srem)
        .route("SISMEMBER", set::sismember)
        .route("SMEMBERS", set::smembers)
        .route("SCARD", set::scard)
        .route("SRANDMEMBER", set::srandmember)
        .route("SPOP", set::spop)
        .route("SINTER", set::sinter)
        .route("SUNION", set::sunion)
        .route("SDIFF", set::sdiff)
        .route("SINTERSTORE", set::sinterstore)
        .route("SUNIONSTORE", set::sunionstore)
        .route("SDIFFSTORE", set::sdiffstore)
        .route("SSCAN", set::sscan)
        .route("ZADD", zset::zadd)
        .route("ZREM", zset::zrem)
        .route("ZINCRBY", zset::zincrby)
        .route("ZSCORE", zset::zscore)
        .route("ZCARD", zset::zcard)
        .route("ZCOUNT", zset::zcount)
        .route("ZRANGE", zset::zrange)
        .route("ZREVRANGE", zset::zrevrange)
        .route("ZRANGEBYSCORE", zset::zrangebyscore)
        .route("ZREVRANGEBYSCORE", zset::zrevrangebyscore)
        .route("ZRANK", zset::zrank)
        .route("ZREVRANK", zset::zrevrank)
        .route("ZPOPMIN", zset::zpopmin)
        .route("ZPOPMAX", zset::zpopmax)
        .route("ZLEXCOUNT", zset::zlexcount)
        .route("ZRANGEBYLEX", zset::zrangebylex)
        .route("ZREVRANGEBYLEX", zset::zrevrangebylex)
        .route("ZSCAN", zset::zscan)
        .route("LPUSH", list::lpush)
        .route("RPUSH", list::rpush)
        .route("LPUSHX", list::lpushx)
        .route("RPUSHX", list::rpushx)
        .route("LPOP", list::lpop)
        .route("RPOP", list::rpop)
        .route("LLEN", list::llen)
        .route("LRANGE", list::lrange)
        .route("LINDEX", list::lindex)
        .route("LSET", list::lset)
        .route("LREM", list::lrem)
        .route("LTRIM", list::ltrim)
        .route("LINSERT", list::linsert)
        .route("RPOPLPUSH", list::rpoplpush)
        .route("BLPOP", list::blpop)
        .route("BRPOP", list::brpop)
        .route("BRPOPLPUSH", list::brpoplpush)
        .route("GETBIT", bitmap::getbit)
        .route("SETBIT", bitmap::setbit)
        .route("BITCOUNT", bitmap::bitcount)
        .route("BITPOS", bitmap::bitpos)
        .route("BITOP", bitmap::bitop)
        .route("BITFIELD", bitfield::bitfield)
        .route("PFADD", hll::pfadd)
        .route("PFCOUNT", hll::pfcount)
        .route("PFMERGE", hll::pfmerge)
        .route("GEOADD", geo::geoadd)
        .route("GEOPOS", geo::geopos)
        .route("GEODIST", geo::geodist)
        .route("GEOHASH", geo::geohash)
        .route("GEORADIUS", geo::georadius)
        .route("GEORADIUSBYMEMBER", geo::georadiusbymember)
        .route("SUBSCRIBE", pubsub::subscribe)
        .route("UNSUBSCRIBE", pubsub::unsubscribe)
        .route("PUBLISH", pubsub::publish)
}