[−][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 | 定义 |
listener |
|
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事件监听器的定义,所有类型的监听器都实现此接口 |