[][src]Crate redis_event

用于监听Redis的写入操作,据此可以实现数据复制,监控等相关的应用。

原理

此crate实现了Redis Replication协议,在运行时,程序将以replica的身份连接到Redis,相当于Redis的一个副本。

所以,在程序连接上某个Redis之后,Redis会将它当前的所有数据以RDB的格式dump一份,dump完毕之后便发送过来,这个RDB中的每一条数据就对应一个Event::RDB事件。

在这之后,Redis接收到来自客户端的写入操作(即Redis命令)后,也会将这个写入操作传播给它的replica,每一个写入操作就对应一个Event::AOF事件。

示例

use std::net::{IpAddr, SocketAddr};
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
use std::str::FromStr;
use std::rc::Rc;
use std::cell::RefCell;
use redis_event::listener;
use redis_event::config::Config;
use redis_event::{NoOpEventHandler, RedisListener};

fn main() -> std::io::Result<()> {
    let host = String::from("127.0.0.1");
    let port = 6379;

    let conf = Config {
        is_discard_rdb: false,            // 不跳过RDB
        is_aof: false,                    // 不处理AOF
        host,
        port,
        username: String::new(),          // 用户名为空
        password: String::new(),          // 密码为空
        repl_id: String::from("?"),       // replication id,若无此id,设置为?即可
        repl_offset: -1,                  // replication offset,若无此offset,设置为-1即可
        read_timeout: None,               // None,即读取永不超时
        write_timeout: None,              // None,即写入永不超时
        is_tls_enabled: false,            // 不启用TLS
        is_tls_insecure: false,           // 未启用TLS,设置为false即可
        identity: None,                   // 未启用TLS,设置为None即可
        identity_passwd: None             // 未启用TLS,设置为None即可
    };
    let running = Arc::new(AtomicBool::new(true));

    let mut builder = listener::Builder::new();
    builder.with_config(conf);
    // 设置控制变量, 通过此变量在外界中断`redis_event`内部的逻辑
    builder.with_control_flag(running);
    // 设置事件处理器
    builder.with_event_handler(Rc::new(RefCell::new(NoOpEventHandler{})));

    let mut redis_listener = builder.build();
    // 启动程序
    redis_listener.start()?;
    Ok(())
}

Modules

cmd

所有支持的Redis命令的定义,以及命令相关的解析代码俱在此模块下

config

定义RedisListener所需的各项配置信息

listener

RedisListener接口的具体实现

rdb

RDB中各项Redis数据相关的结构体定义,以及RDB解析相关的代码在此模块下

resp

Redis Serialization Protocol相关的解析代码

Structs

NoOpEventHandler

对于接收到的Redis事件不做任何处理

Enums

Event

Redis事件

Traits

EventHandler

Redis事件处理器的定义,所有类型的处理器都必须实现此接口

ModuleParser

Module Parser

RDBParser

Redis RDB 解析器定义

RedisListener

Redis事件监听器的定义,所有类型的监听器都实现此接口