diff --git a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/RClient.java b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/RClient.java new file mode 100644 index 000000000..79fd53f4a --- /dev/null +++ b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/RClient.java @@ -0,0 +1,109 @@ +package com.yomahub.liteflow.parser.redis.mode; + +import cn.hutool.core.collection.CollectionUtil; +import org.redisson.api.RMap; +import org.redisson.api.RMapCache; +import org.redisson.api.RScript; +import org.redisson.api.RedissonClient; +import org.redisson.api.map.event.MapEntryListener; +import org.redisson.client.codec.StringCodec; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * Redisson 客户端封装类. + * + * @author hxinyu + * @since 2.11.0 + */ +public class RClient { + + private final RedissonClient redissonClient; + + private Map map = new HashMap<>(); + + public RClient(RedissonClient redissonClient) { + this.redissonClient = redissonClient; + } + + + /** + * get hashmap of the key + * + * @param key + * @return hashmap + */ + public Map getMap(String key) { + RMapCache mapCache = redissonClient.getMapCache(key); + Set mapFieldSet = mapCache.keySet(); + if (CollectionUtil.isEmpty(mapFieldSet)) { + return map; + } + for (String field : mapFieldSet) { + String value = mapCache.get(field); + map.put(field, value); + } + return map; + } + + + /** + * add listener of the key + * + * @param key + * @param listener + * @return listener id + */ + public int addListener(String key, MapEntryListener listener) { + RMapCache mapCache = redissonClient.getMapCache(key); + return mapCache.addListener(listener); + } + + /** + * get all keys of hash + * + * @param key + * @return + */ + public Set hkeys(String key) { + RMap map = redissonClient.getMap(key, new StringCodec()); + return map.readAllKeySet(); + } + + /** + * gey value of the key + * + * @param key + * @param field + * @return + */ + public String hget(String key, String field) { + RMap map = redissonClient.getMap(key, new StringCodec()); + return map.get(field); + } + + /** + * Loads Lua script into Redis scripts cache and returns its SHA-1 digest + * @param luaScript + * @return shaDigest + */ + public String scriptLoad(String luaScript) { + RScript script = redissonClient.getScript(new StringCodec()); + return script.scriptLoad(luaScript); + } + + /** + * Executes Lua script stored in Redis scripts cache by SHA-1 digest + * @param shaDigest + * @param args + * @return + */ + public String evalSha(String shaDigest, String... args){ + RScript script = redissonClient.getScript(new StringCodec()); + return script.evalSha(RScript.Mode.READ_ONLY, shaDigest, RScript.ReturnType.VALUE, + Arrays.asList(args)).toString(); + } +} diff --git a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RClient.java b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RClient.java deleted file mode 100644 index 70cd92f92..000000000 --- a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RClient.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.yomahub.liteflow.parser.redis.mode.subscribe; - -import cn.hutool.core.collection.CollectionUtil; -import org.redisson.api.RMapCache; -import org.redisson.api.RedissonClient; -import org.redisson.api.map.event.MapEntryListener; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -/** - * Redisson 客户端封装类. - * - * @author hxinyu - * @since 2.11.0 - */ -public class RClient { - - private final RedissonClient redissonClient; - - private Map map = new HashMap<>(); - - public RClient(RedissonClient redissonClient) { - this.redissonClient = redissonClient; - } - - - /** - * get hashmap of the key - * - * @param key - * @return hashmap - */ - public Map getMap(String key) { - RMapCache mapCache = redissonClient.getMapCache(key); - Set mapFieldSet = mapCache.keySet(); - if (CollectionUtil.isEmpty(mapFieldSet)) { - return map; - } - for (String field : mapFieldSet) { - String value = mapCache.get(field); - map.put(field, value); - } - return map; - } - - - /** - * add listener of the key - * @param key - * @param listener - * @return listener id - */ - public int addListener(String key, MapEntryListener listener) { - RMapCache mapCache = redissonClient.getMapCache(key); - return mapCache.addListener(listener); - } -} diff --git a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java index 99ad264f1..eb8acd7ab 100644 --- a/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java +++ b/liteflow-rule-plugin/liteflow-rule-redis/src/main/java/com/yomahub/liteflow/parser/redis/mode/subscribe/RedisParserSubscribeMode.java @@ -8,12 +8,11 @@ import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.parser.redis.exception.RedisException; +import com.yomahub.liteflow.parser.redis.mode.RClient; import com.yomahub.liteflow.parser.redis.mode.RedisParserHelper; import com.yomahub.liteflow.parser.redis.vo.RedisParserVO; import com.yomahub.liteflow.spi.holder.ContextAwareHolder; import org.redisson.Redisson; -import org.redisson.api.RMapCache; -import org.redisson.api.RedissonClient; import org.redisson.api.map.event.EntryCreatedListener; import org.redisson.api.map.event.EntryRemovedListener; import org.redisson.api.map.event.EntryUpdatedListener; @@ -22,7 +21,6 @@ import org.redisson.config.Config; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; /** * Redis Pub/Sub机制实现类 diff --git a/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java index 9c5c31793..efc161a6f 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/redis/RedisWithXmlELSubscribeSpringbootTest.java @@ -3,7 +3,7 @@ package com.yomahub.liteflow.test.redis; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.flow.LiteflowResponse; -import com.yomahub.liteflow.parser.redis.mode.subscribe.RClient; +import com.yomahub.liteflow.parser.redis.mode.RClient; import com.yomahub.liteflow.slot.DefaultContext; import com.yomahub.liteflow.test.BaseTest; import org.junit.jupiter.api.AfterEach;