From a6fc04c07e2406af94fe844b9a61c17fa07338e1 Mon Sep 17 00:00:00 2001 From: LamGC Date: Mon, 11 Jan 2021 16:42:06 +0800 Subject: [PATCH] =?UTF-8?q?[Fix]=20CacheStore-Redis=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20RedisCacheStore=20=E9=83=A8=E5=88=86=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=AF=B9=E4=BA=8E=E4=BD=9C=E7=94=A8=20Key=20=E7=9A=84=E8=8C=83?= =?UTF-8?q?=E5=9B=B4=E4=B8=8D=E6=98=8E=E7=A1=AE=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Fix] RedisCacheStore 修复 'clear()', 'keySet()' 和 'size()' 方法影响到不属于 CacheStore 的问题; [Update] RedisSingleCacheStoreTest 完善测试项; --- .../cgj/bot/cache/redis/RedisCacheStore.java | 15 ++++++++++----- .../cache/redis/RedisSingleCacheStoreTest.java | 10 ++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ContentGrabbingJi-CacheStore-redis/src/main/java/net/lamgc/cgj/bot/cache/redis/RedisCacheStore.java b/ContentGrabbingJi-CacheStore-redis/src/main/java/net/lamgc/cgj/bot/cache/redis/RedisCacheStore.java index 59b9a49..d4b551f 100644 --- a/ContentGrabbingJi-CacheStore-redis/src/main/java/net/lamgc/cgj/bot/cache/redis/RedisCacheStore.java +++ b/ContentGrabbingJi-CacheStore-redis/src/main/java/net/lamgc/cgj/bot/cache/redis/RedisCacheStore.java @@ -19,9 +19,10 @@ package net.lamgc.cgj.bot.cache.redis; import net.lamgc.cgj.bot.cache.CacheKey; import net.lamgc.cgj.bot.cache.CacheStore; -import redis.clients.jedis.Jedis; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; /** @@ -62,7 +63,7 @@ public abstract class RedisCacheStore implements CacheStore { } else { result = jedis.persist(keyString); } - return result == RedisUtils.RETURN_CODE_OK; + return result.intValue() == RedisUtils.RETURN_CODE_OK; }); } @@ -76,12 +77,15 @@ public abstract class RedisCacheStore implements CacheStore { @Override public long size() { - return connectionPool.executeRedis(Jedis::dbSize); + return (long) connectionPool.executeRedis(jedis -> jedis.keys(getKeyString(RedisUtils.CACHE_KEY_ALL)).size()); } @Override public boolean clear() { - return connectionPool.executeRedis(jedis -> RedisUtils.isOk(jedis.flushDB())); + List keys = new ArrayList<>(1); + keys.add(getKeyString(RedisUtils.CACHE_KEY_ALL)); + connectionPool.executeScript(LuaScript.STORE_REMOVE_KEYS_BY_PREFIX, keys, null); + return true; } @Override @@ -96,7 +100,8 @@ public abstract class RedisCacheStore implements CacheStore { @Override public Set keySet() { - Set keys = connectionPool.executeRedis(jedis -> jedis.keys(RedisUtils.KEY_PATTERN_ALL)); + Set keys = connectionPool.executeRedis(jedis -> + jedis.keys(getKeyString(RedisUtils.CACHE_KEY_ALL))); final int prefixLength = getKeyPrefix().length(); Set newKeys = new HashSet<>(); for (String key : keys) { diff --git a/ContentGrabbingJi-CacheStore-redis/src/test/java/net/lamgc/cgj/bot/cache/redis/RedisSingleCacheStoreTest.java b/ContentGrabbingJi-CacheStore-redis/src/test/java/net/lamgc/cgj/bot/cache/redis/RedisSingleCacheStoreTest.java index 9c12aab..e6b68d3 100644 --- a/ContentGrabbingJi-CacheStore-redis/src/test/java/net/lamgc/cgj/bot/cache/redis/RedisSingleCacheStoreTest.java +++ b/ContentGrabbingJi-CacheStore-redis/src/test/java/net/lamgc/cgj/bot/cache/redis/RedisSingleCacheStoreTest.java @@ -53,7 +53,7 @@ public class RedisSingleCacheStoreTest { } } - private final static SingleCacheStore cacheStore = factory.newSingleCacheStore("test", new StringToStringConverter()); + private final static SingleCacheStore cacheStore = factory.newSingleCacheStore("test:single", new StringToStringConverter()); @Before public void before() { @@ -62,7 +62,7 @@ public class RedisSingleCacheStoreTest { @Test public void nullThrowTest() { - final SingleCacheStore tempCacheStore = factory.newSingleCacheStore("test" + RedisUtils.KEY_SEPARATOR, new StringToStringConverter()); + final SingleCacheStore tempCacheStore = factory.newSingleCacheStore("test:single" + RedisUtils.KEY_SEPARATOR, new StringToStringConverter()); final CacheKey key = new CacheKey("testKey"); // RedisSingleCacheStore @@ -140,14 +140,18 @@ public class RedisSingleCacheStoreTest { @Test public void clearTest() { + final SingleCacheStore secondSingleCacheStore = + factory.newSingleCacheStore("test:single_b", new StringToStringConverter()); final CacheKey key = new CacheKey("testKey"); final String value = "testValue"; Assert.assertTrue("Set operation failed!", cacheStore.set(key, value)); + Assert.assertTrue("Set operation failed!", secondSingleCacheStore.set(key, value)); Assert.assertTrue(cacheStore.exists(key)); Assert.assertTrue("Clear operation failed!", cacheStore.clear()); Assert.assertFalse(cacheStore.exists(key)); + Assert.assertTrue(secondSingleCacheStore.exists(key)); } @Test @@ -160,9 +164,11 @@ public class RedisSingleCacheStoreTest { expectedMap.put("test05", "testValue05"); expectedMap.put("test06", "testValue06"); + Assert.assertEquals(0, cacheStore.size()); expectedMap.forEach((key, value) -> cacheStore.set(new CacheKey(key), value)); Assert.assertEquals(expectedMap.size(), cacheStore.size()); Assert.assertTrue(expectedMap.keySet().containsAll(cacheStore.keySet())); + Assert.assertTrue(cacheStore.keySet().containsAll(expectedMap.keySet())); } }