[][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::standalone;
use redis_event::config::Config;
use redis_event::{NoOpEventHandler, RedisListener};


let ip = IpAddr::from_str("127.0.0.1").unwrap();
let port = 6379;

let conf = Config {
    is_discard_rdb: false,            // 不跳过RDB
    is_aof: false,                    // 不处理AOF
    addr: SocketAddr::new(ip, port),
    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,即写入永不超时
};
let running = Arc::new(AtomicBool::new(true));
let mut redis_listener = standalone::new(conf, running);
// 设置事件处理器
redis_listener.set_event_handler(Rc::new(RefCell::new(NoOpEventHandler{})));
// 启动程序
redis_listener.start()?;

Modules

cmd

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

config

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

listener

RedisListener接口的具体实现

rdb

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

Structs

NoOpEventHandler

No Operation处理器,对于接收到的事件,不做任何处理

Enums

Event

Redis事件

Traits

EventHandler

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

ModuleParser

Module Parser

RedisListener

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