diff --git a/src/main/java/me/unurled/sacredrealms/sr/data/DataHandler.java b/src/main/java/me/unurled/sacredrealms/sr/data/DataHandler.java index a6ff112..d1c92da 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/data/DataHandler.java +++ b/src/main/java/me/unurled/sacredrealms/sr/data/DataHandler.java @@ -1,5 +1,6 @@ package me.unurled.sacredrealms.sr.data; +import java.util.List; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -35,4 +36,11 @@ public interface DataHandler { * @return If the key exists */ boolean exists(@NotNull String key); + + /** + * Get all keys from the data source + * + * @return All keys + */ + List getKeysAll(@NotNull String key); } diff --git a/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java b/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java index df832fb..a711e0c 100644 --- a/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java +++ b/src/main/java/me/unurled/sacredrealms/sr/data/Redis.java @@ -2,9 +2,13 @@ package me.unurled.sacredrealms.sr.data; import static me.unurled.sacredrealms.sr.utils.Logger.error; +import java.util.ArrayList; +import java.util.List; import me.unurled.sacredrealms.sr.SR; import org.jetbrains.annotations.NotNull; import redis.clients.jedis.JedisPooled; +import redis.clients.jedis.params.ScanParams; +import redis.clients.jedis.resps.ScanResult; public class Redis implements DataHandler { @@ -69,4 +73,25 @@ public class Redis implements DataHandler { public boolean exists(@NotNull String key) { return client.exists(key); } + + /** + * Get all keys from the data source + * + * @param key + * @return All keys + */ + @Override + public List getKeysAll(@NotNull String key) { + String cursor = "0"; + ScanParams params = new ScanParams().match(key); + List keys = new ArrayList<>(); + + do { + ScanResult result = client.scan(cursor, params); + cursor = result.getCursor(); + keys.addAll(result.getResult()); + } while (!cursor.equals("0")); + + return keys; + } }