# redis-replicator
**Repository Path**: boobor/redis-replicator
## Basic Information
- **Project Name**: redis-replicator
- **Description**: Redis-replicator是一款用java写的redis rdb以及命令解析软件.
它可以实时解析,过滤,广播rdb以及command事件
支持redis2.8+,内部采用psync命令同步数据
支持rdb version 6,rdb version 7
支持注册命令解析器.
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 48
- **Created**: 2016-08-28
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Redis-replicator
[](https://travis-ci.org/leonchen83/redis-replicator)
[](https://coveralls.io/github/leonchen83/redis-replicator?branch=master)
[](https://maven-badges.herokuapp.com/maven-central/com.moilioncircle/redis-replicator)
[](http://www.javadoc.io/doc/com.moilioncircle/redis-replicator)
[](https://github.com/leonchen83/redis-replicator/blob/master/LICENSE)
Redis Replicator is a redis RDB and Command parser written in java.
It can parse,filter,broadcast the RDB and Command events in a real time manner.
#Requirements
jdk 1.7+
rdb version 6
rdb version 7
#Maven Dependency
```java
com.moilioncircle
redis-replicator
1.0.6
```
#Flow Chart

#Class Chart

#Usage
##Socket
```java
RedisReplicator replicator = new RedisReplicator("127.0.0.1", 6379, Configuration.defaultSetting());
replicator.addRdbListener(new RdbListener.Adaptor() {
@Override
public void handle(Replicator replicator, KeyValuePair> kv) {
System.out.println(kv);
}
});
replicator.addCommandListener(new CommandListener() {
@Override
public void handle(Replicator replicator, Command command) {
System.out.println(command);
}
});
replicator.open();
```
##File
```java
RedisReplicator replicator = new RedisReplicator(new File("dump.rdb"), Configuration.defaultSetting());
replicator.addRdbFilter(new RdbFilter() {
@Override
public boolean accept(KeyValuePair> kv) {
return kv.getKey().startsWith("SESSION");
}
});
replicator.addRdbListener(new RdbListener.Adaptor() {
@Override
public void handle(Replicator replicator, KeyValuePair> kv) {
System.out.println(kv);
}
});
replicator.open();
```
#Command Extension
* **write a command parser.**
```java
public class AppendParser implements CommandParser {
@Override
public AppendCommand parse(CommandName cmdName, Object[] params) {
return new AppendCommand((String) params[0], (String) params[1]);
}
public static class AppendCommand implements Command {
public final String key;
public final String value;
public AppendCommand(String key, String value) {
this.key = key;
this.value = value;
}
@Override
public String toString() {
return "AppendCommand{" +
"key='" + key + '\'' +
", value='" + value + '\'' +
'}';
}
@Override
public CommandName name() {
return CommandName.name("APPEND");
}
}
}
```
* **register this parser.**
```java
RedisReplicator replicator = new RedisReplicator("127.0.0.1",6379);
replicator.addCommandParser(CommandName.name("APPEND"),new AppendParser());
```
* **handle event about this command.**
```java
replicator.addCommandListener(new CommandListener() {
@Override
public void handle(Replicator replicator, Command command) {
if(command.name().equals(CommandName.name("APPEND"))){
//your code here
}
}
});
```
#References
* [rdb.c](https://github.com/antirez/redis/blob/unstable/src/rdb.c)
* [Redis RDB File Format](https://github.com/sripathikrishnan/redis-rdb-tools/wiki/Redis-RDB-Dump-File-Format)
* [Redis Protocol specification](http://redis.io/topics/protocol)