From 05c988f2c7791a9c656c41ca2c2e1507e301215f Mon Sep 17 00:00:00 2001 From: William Date: Thu, 21 Dec 2023 15:50:35 +0000 Subject: [PATCH] refactor: Extend `DATA_UPDATE` Redis cache time on `LOCKSTEP` mode --- .../william278/husksync/redis/RedisKeyType.java | 16 +++++----------- .../william278/husksync/redis/RedisManager.java | 12 +++++++----- .../husksync/sync/DelayDataSyncer.java | 3 ++- .../husksync/sync/LockstepDataSyncer.java | 3 ++- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/net/william278/husksync/redis/RedisKeyType.java b/common/src/main/java/net/william278/husksync/redis/RedisKeyType.java index 46f6e827..ebe23f6c 100644 --- a/common/src/main/java/net/william278/husksync/redis/RedisKeyType.java +++ b/common/src/main/java/net/william278/husksync/redis/RedisKeyType.java @@ -24,15 +24,13 @@ import org.jetbrains.annotations.NotNull; import java.util.Locale; public enum RedisKeyType { - DATA_UPDATE(10), - SERVER_SWITCH(10), - DATA_CHECKOUT(60 * 60 * 24 * 7 * 52); - private final int timeToLive; + DATA_UPDATE, + SERVER_SWITCH, + DATA_CHECKOUT; - RedisKeyType(int timeToLive) { - this.timeToLive = timeToLive; - } + public static final int TTL_1_YEAR = 60 * 60 * 24 * 7 * 52; // 1 year + public static final int TTL_10_SECONDS = 10; // 10 seconds @NotNull public String getKeyPrefix(@NotNull String clusterId) { @@ -44,8 +42,4 @@ public enum RedisKeyType { ); } - public int getTimeToLive() { - return timeToLive; - } - } diff --git a/common/src/main/java/net/william278/husksync/redis/RedisManager.java b/common/src/main/java/net/william278/husksync/redis/RedisManager.java index cfbec2cc..450033b4 100644 --- a/common/src/main/java/net/william278/husksync/redis/RedisManager.java +++ b/common/src/main/java/net/william278/husksync/redis/RedisManager.java @@ -181,15 +181,16 @@ public class RedisManager extends JedisPubSub { /** * Set a user's data to Redis * - * @param user the user to set data for - * @param data the user's data to set + * @param user the user to set data for + * @param data the user's data to set + * @param timeToLive The time to cache the data for */ @Blocking - public void setUserData(@NotNull User user, @NotNull DataSnapshot.Packed data) { + public void setUserData(@NotNull User user, @NotNull DataSnapshot.Packed data, int timeToLive) { try (Jedis jedis = jedisPool.getResource()) { jedis.setex( getKey(RedisKeyType.DATA_UPDATE, user.getUuid(), clusterId), - RedisKeyType.DATA_UPDATE.getTimeToLive(), + timeToLive, data.asBytes(plugin) ); plugin.debug(String.format("[%s] Set %s key on Redis", user.getUsername(), RedisKeyType.DATA_UPDATE)); @@ -264,7 +265,8 @@ public class RedisManager extends JedisPubSub { try (Jedis jedis = jedisPool.getResource()) { jedis.setex( getKey(RedisKeyType.SERVER_SWITCH, user.getUuid(), clusterId), - RedisKeyType.SERVER_SWITCH.getTimeToLive(), new byte[0] + RedisKeyType.TTL_10_SECONDS, + new byte[0] ); plugin.debug(String.format("[%s] Set %s key to Redis", user.getUsername(), RedisKeyType.SERVER_SWITCH)); diff --git a/common/src/main/java/net/william278/husksync/sync/DelayDataSyncer.java b/common/src/main/java/net/william278/husksync/sync/DelayDataSyncer.java index 4e06a607..9262ca33 100644 --- a/common/src/main/java/net/william278/husksync/sync/DelayDataSyncer.java +++ b/common/src/main/java/net/william278/husksync/sync/DelayDataSyncer.java @@ -21,6 +21,7 @@ package net.william278.husksync.sync; import net.william278.husksync.HuskSync; import net.william278.husksync.data.DataSnapshot; +import net.william278.husksync.redis.RedisKeyType; import net.william278.husksync.user.OnlineUser; import org.jetbrains.annotations.NotNull; @@ -61,7 +62,7 @@ public class DelayDataSyncer extends DataSyncer { plugin.runAsync(() -> { plugin.getRedisManager().setUserServerSwitch(user); final DataSnapshot.Packed data = user.createSnapshot(DataSnapshot.SaveCause.DISCONNECT); - plugin.getRedisManager().setUserData(user, data); + plugin.getRedisManager().setUserData(user, data, RedisKeyType.TTL_10_SECONDS); plugin.getDatabase().addSnapshot(user, data); }); } diff --git a/common/src/main/java/net/william278/husksync/sync/LockstepDataSyncer.java b/common/src/main/java/net/william278/husksync/sync/LockstepDataSyncer.java index 6401d6a3..1b9193ba 100644 --- a/common/src/main/java/net/william278/husksync/sync/LockstepDataSyncer.java +++ b/common/src/main/java/net/william278/husksync/sync/LockstepDataSyncer.java @@ -21,6 +21,7 @@ package net.william278.husksync.sync; import net.william278.husksync.HuskSync; import net.william278.husksync.data.DataSnapshot; +import net.william278.husksync.redis.RedisKeyType; import net.william278.husksync.user.OnlineUser; import org.jetbrains.annotations.NotNull; @@ -60,7 +61,7 @@ public class LockstepDataSyncer extends DataSyncer { public void saveUserData(@NotNull OnlineUser user) { plugin.runAsync(() -> { final DataSnapshot.Packed data = user.createSnapshot(DataSnapshot.SaveCause.DISCONNECT); - plugin.getRedisManager().setUserData(user, data); + plugin.getRedisManager().setUserData(user, data, RedisKeyType.TTL_1_YEAR); plugin.getRedisManager().setUserCheckedOut(user, false); plugin.getDatabase().addSnapshot(user, data); });