diff --git a/pom.xml b/pom.xml
index b1cc606..36ba689 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,7 +130,8 @@
redis.clients
jedis
- 2.4.2
+ 2.5.1
+ compile
net.md-5
diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java
index 5018a11..3347d18 100644
--- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java
+++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungee.java
@@ -21,10 +21,7 @@ import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
-import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisPool;
-import redis.clients.jedis.JedisPoolConfig;
-import redis.clients.jedis.JedisPubSub;
+import redis.clients.jedis.*;
import redis.clients.jedis.exceptions.JedisConnectionException;
import redis.clients.jedis.exceptions.JedisException;
@@ -409,8 +406,12 @@ public final class RedisBungee extends Plugin {
try {
tmpRsc.hdel("playerCounts", serverId);
if (tmpRsc.scard("server:" + serverId + ":usersOnline") > 0) {
- for (String member : tmpRsc.smembers("server:" + serverId + ":usersOnline"))
- RedisUtil.cleanUpPlayer(member, tmpRsc);
+ Set players = tmpRsc.smembers("server:" + serverId + ":usersOnline");
+ Pipeline pipeline = tmpRsc.pipelined();
+ for (String member : players)
+ RedisUtil.cleanUpPlayer(member, pipeline);
+
+ pipeline.sync();
}
tmpRsc.hdel("heartbeats", serverId);
} finally {
diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeConsumer.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeConsumer.java
index a5be626..2cae112 100644
--- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeConsumer.java
+++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeConsumer.java
@@ -12,6 +12,7 @@ import com.imaginarycode.minecraft.redisbungee.consumerevents.PlayerLoggedInCons
import com.imaginarycode.minecraft.redisbungee.consumerevents.PlayerLoggedOffConsumerEvent;
import lombok.RequiredArgsConstructor;
import redis.clients.jedis.Jedis;
+import redis.clients.jedis.Pipeline;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
@@ -46,17 +47,22 @@ public class RedisBungeeConsumer implements Runnable {
private void handle(ConsumerEvent event, Jedis jedis) {
if (event instanceof PlayerLoggedInConsumerEvent) {
PlayerLoggedInConsumerEvent event1 = (PlayerLoggedInConsumerEvent) event;
- jedis.sadd("server:" + RedisBungee.getApi().getServerId() + ":usersOnline", event1.getPlayer().getUniqueId().toString());
- jedis.hset("player:" + event1.getPlayer().getUniqueId().toString(), "online", "0");
- jedis.hset("player:" + event1.getPlayer().getUniqueId().toString(), "ip", event1.getPlayer().getAddress().getAddress().getHostAddress());
- jedis.hset("player:" + event1.getPlayer().getUniqueId().toString(), "name", event1.getPlayer().getName());
- jedis.hset("uuids", event1.getPlayer().getName().toLowerCase(), event1.getPlayer().getUniqueId().toString());
+ Pipeline pipeline = jedis.pipelined();
+ pipeline.sadd("server:" + RedisBungee.getApi().getServerId() + ":usersOnline", event1.getPlayer().getUniqueId().toString());
+ pipeline.hset("player:" + event1.getPlayer().getUniqueId().toString(), "online", "0");
+ pipeline.hset("player:" + event1.getPlayer().getUniqueId().toString(), "ip", event1.getPlayer().getAddress().getAddress().getHostAddress());
+ pipeline.hset("player:" + event1.getPlayer().getUniqueId().toString(), "name", event1.getPlayer().getName());
+ pipeline.hset("uuids", event1.getPlayer().getName().toLowerCase(), event1.getPlayer().getUniqueId().toString());
+ pipeline.sync();
} else if (event instanceof PlayerLoggedOffConsumerEvent) {
PlayerLoggedOffConsumerEvent event1 = (PlayerLoggedOffConsumerEvent) event;
+ Pipeline pipeline = jedis.pipelined();
jedis.hset("player:" + event1.getPlayer().getUniqueId().toString(), "online", String.valueOf(System.currentTimeMillis()));
- RedisUtil.cleanUpPlayer(event1.getPlayer().getUniqueId().toString(), jedis);
+ RedisUtil.cleanUpPlayer(event1.getPlayer().getUniqueId().toString(), pipeline);
+ pipeline.sync();
} else if (event instanceof PlayerChangedServerConsumerEvent) {
PlayerChangedServerConsumerEvent event1 = (PlayerChangedServerConsumerEvent) event;
+ // No use in pipelining this
jedis.hset("player:" + event1.getPlayer().getUniqueId().toString(), "server", event1.getNewServer().getName());
}
}
diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java
index ae47648..7510803 100644
--- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java
+++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java
@@ -7,6 +7,7 @@
package com.imaginarycode.minecraft.redisbungee;
import redis.clients.jedis.Jedis;
+import redis.clients.jedis.Pipeline;
class RedisUtil {
public static void cleanUpPlayer(String player, Jedis rsc) {
@@ -14,4 +15,10 @@ class RedisUtil {
rsc.hdel("player:" + player, "server");
rsc.hdel("player:" + player, "ip");
}
+
+ public static void cleanUpPlayer(String player, Pipeline rsc) {
+ rsc.srem("server:" + RedisBungee.getApi().getServerId() + ":usersOnline", player);
+ rsc.hdel("player:" + player, "server");
+ rsc.hdel("player:" + player, "ip");
+ }
}