From 87e998d5785a39fed400e2c4d301b6d214b53f28 Mon Sep 17 00:00:00 2001 From: ineanto Date: Sat, 20 May 2023 00:52:16 +0200 Subject: [PATCH] feat(cache): initial redis support --- .../nicko/storage/cache/redis/RedisCache.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/xyz/atnrch/nicko/storage/cache/redis/RedisCache.java b/src/main/java/xyz/atnrch/nicko/storage/cache/redis/RedisCache.java index 1aeb8dd..e833ae8 100644 --- a/src/main/java/xyz/atnrch/nicko/storage/cache/redis/RedisCache.java +++ b/src/main/java/xyz/atnrch/nicko/storage/cache/redis/RedisCache.java @@ -1,5 +1,8 @@ package xyz.atnrch.nicko.storage.cache.redis; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import redis.clients.jedis.Jedis; import xyz.atnrch.nicko.disguise.ActionResult; import xyz.atnrch.nicko.disguise.NickoProfile; import xyz.atnrch.nicko.storage.cache.Cache; @@ -9,23 +12,36 @@ import java.util.Optional; import java.util.UUID; public class RedisCache extends Cache { + private final Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create(); + private RedisCacheProvider provider; + @Override public CacheProvider getProvider() { - return null; + if (provider == null) { + provider = new RedisCacheProvider(); + } + return provider; } @Override public ActionResult cache(UUID uuid, NickoProfile profile) { - return null; + final Jedis jedis = provider.getJedis(); + jedis.set("nicko:" + uuid.toString(), gson.toJson(profile)); + return new ActionResult<>(); } @Override public boolean isCached(UUID uuid) { - return false; + final Jedis jedis = provider.getJedis(); + return jedis.exists("nicko:" + uuid.toString()); } @Override public Optional retrieve(UUID uuid) { - return Optional.empty(); + final Jedis jedis = provider.getJedis(); + // TODO (Ineanto, 5/20/23): Check if cached before because Jedis returns a bulk reply so this is unsafe + final String data = jedis.get("nicko:" + uuid.toString()); + final NickoProfile profile = gson.fromJson(data, NickoProfile.class); + return Optional.of(profile); } }