From 4834b7826fb49568ab7f1d5803d5904e69cd8c31 Mon Sep 17 00:00:00 2001 From: Tux Date: Mon, 22 Jun 2015 04:00:25 -0400 Subject: [PATCH] Use more efficient HMSET when possible. --- .../minecraft/redisbungee/RedisBungeeListener.java | 9 ++++++--- .../imaginarycode/minecraft/redisbungee/RedisUtil.java | 1 + .../minecraft/redisbungee/util/UUIDTranslator.java | 9 +++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java index 3f1fa0c..807e539 100644 --- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java +++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisBungeeListener.java @@ -75,12 +75,15 @@ public class RedisBungeeListener implements Listener { plugin.getService().submit(new RedisCallable(plugin) { @Override protected Void call(Jedis jedis) { + Map playerData = new HashMap<>(4); + playerData.put("online", "0"); + playerData.put("ip", event.getPlayer().getAddress().getAddress().getHostAddress()); + playerData.put("proxy", RedisBungee.getConfiguration().getServerId()); + Pipeline pipeline = jedis.pipelined(); pipeline.sadd("proxy:" + RedisBungee.getApi().getServerId() + ":usersOnline", event.getPlayer().getUniqueId().toString()); - pipeline.hset("player:" + event.getPlayer().getUniqueId().toString(), "online", "0"); - pipeline.hset("player:" + event.getPlayer().getUniqueId().toString(), "ip", event.getPlayer().getAddress().getAddress().getHostAddress()); plugin.getUuidTranslator().persistInfo(event.getPlayer().getName(), event.getPlayer().getUniqueId(), pipeline); - pipeline.hset("player:" + event.getPlayer().getUniqueId().toString(), "proxy", RedisBungee.getConfiguration().getServerId()); + pipeline.hmset("player:" + event.getPlayer().getUniqueId().toString(), playerData); pipeline.publish("redisbungee-data", RedisBungee.getGson().toJson(new DataManager.DataManagerMessage<>( event.getPlayer().getUniqueId(), DataManager.DataManagerMessage.Action.JOIN, new DataManager.LoginPayload(event.getPlayer().getAddress().getAddress())))); diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java index ce812d9..e7b75f8 100644 --- a/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java +++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/RedisUtil.java @@ -30,6 +30,7 @@ import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; class RedisUtil { + // Compatibility restraints prevent me from using using HDEL with multiple keys. public static void cleanUpPlayer(String player, Jedis rsc) { rsc.srem("proxy:" + RedisBungee.getApi().getServerId() + ":usersOnline", player); rsc.hdel("player:" + player, "server"); diff --git a/src/main/java/com/imaginarycode/minecraft/redisbungee/util/UUIDTranslator.java b/src/main/java/com/imaginarycode/minecraft/redisbungee/util/UUIDTranslator.java index 6459747..9ca3ed3 100644 --- a/src/main/java/com/imaginarycode/minecraft/redisbungee/util/UUIDTranslator.java +++ b/src/main/java/com/imaginarycode/minecraft/redisbungee/util/UUIDTranslator.java @@ -27,6 +27,7 @@ package com.imaginarycode.minecraft.redisbungee.util; import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.imaginarycode.minecraft.redisbungee.RedisBungee; import lombok.Getter; @@ -200,14 +201,14 @@ public final class UUIDTranslator { public final void persistInfo(String name, UUID uuid, Jedis jedis) { addToMaps(name, uuid); - jedis.hset("uuid-cache", name.toLowerCase(), RedisBungee.getGson().toJson(uuidToNameMap.get(uuid))); - jedis.hset("uuid-cache", uuid.toString(), RedisBungee.getGson().toJson(uuidToNameMap.get(uuid))); + String json = RedisBungee.getGson().toJson(uuidToNameMap.get(uuid)); + jedis.hmset("uuid-cache", ImmutableMap.of(name, json, uuid.toString(), json)); } public final void persistInfo(String name, UUID uuid, Pipeline jedis) { addToMaps(name, uuid); - jedis.hset("uuid-cache", name.toLowerCase(), RedisBungee.getGson().toJson(uuidToNameMap.get(uuid))); - jedis.hset("uuid-cache", uuid.toString(), RedisBungee.getGson().toJson(uuidToNameMap.get(uuid))); + String json = RedisBungee.getGson().toJson(uuidToNameMap.get(uuid)); + jedis.hmset("uuid-cache", ImmutableMap.of(name, json, uuid.toString(), json)); } @RequiredArgsConstructor