From 4fff62d2c86673fdb8dfe276fa070270a545caa2 Mon Sep 17 00:00:00 2001
From: heliang <3596006474@qq.com>
Date: Wed, 8 May 2024 06:50:20 +0800
Subject: [PATCH] =?UTF-8?q?Redis=20=E6=8F=92=E4=BB=B6=E6=94=AF=E6=8C=81?=
=?UTF-8?q?=E4=BD=BF=E7=94=A8=20Redisson=20=E4=BD=9C=E4=B8=BA=E5=AE=A2?=
=?UTF-8?q?=E6=88=B7=E7=AB=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../crane4j-extension-redisson/pom.xml | 34 +++
.../StringKeyRedissonCacheManger.java | 243 ++++++++++++++++++
.../StringKeyRedissonChangeManagerTest.java | 118 +++++++++
pom.xml | 1 +
4 files changed, 396 insertions(+)
create mode 100644 crane4j-extension/crane4j-extension-redisson/pom.xml
create mode 100644 crane4j-extension/crane4j-extension-redisson/src/main/java/cn/crane4j/extension/redisson/StringKeyRedissonCacheManger.java
create mode 100644 crane4j-extension/crane4j-extension-redisson/src/test/java/cn/crane4j/extension/redisson/StringKeyRedissonChangeManagerTest.java
diff --git a/crane4j-extension/crane4j-extension-redisson/pom.xml b/crane4j-extension/crane4j-extension-redisson/pom.xml
new file mode 100644
index 00000000..1025476f
--- /dev/null
+++ b/crane4j-extension/crane4j-extension-redisson/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+
+ cn.crane4j
+ crane4j
+ 2.8.0
+ ../../pom.xml
+
+
+ crane4j-extension-redisson
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+ cn.crane4j
+ crane4j-core
+ 2.8.0
+ compile
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ 3.15.6
+
+
+
+
\ No newline at end of file
diff --git a/crane4j-extension/crane4j-extension-redisson/src/main/java/cn/crane4j/extension/redisson/StringKeyRedissonCacheManger.java b/crane4j-extension/crane4j-extension-redisson/src/main/java/cn/crane4j/extension/redisson/StringKeyRedissonCacheManger.java
new file mode 100644
index 00000000..f168e05a
--- /dev/null
+++ b/crane4j-extension/crane4j-extension-redisson/src/main/java/cn/crane4j/extension/redisson/StringKeyRedissonCacheManger.java
@@ -0,0 +1,243 @@
+package cn.crane4j.extension.redisson;
+import cn.crane4j.core.cache.AbstractCacheManager;
+import lombok.NonNull;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.nullness.qual.Nullable;
+import org.redisson.api.RBatch;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+@Setter
+@Slf4j
+public class StringKeyRedissonCacheManger extends AbstractCacheManager {
+ /**
+ * Global prefix for all cache keys
+ */
+ @NonNull
+ private String globalPrefix = "crane4j:cache:";
+ @NonNull
+ private RedissonClient redissonClient;
+ private boolean enableClearCache = false;
+ public StringKeyRedissonCacheManger(@NonNull RedissonClient redisson) {
+ this.redissonClient = redisson;
+ }
+
+ /**
+ * Create cache instance.
+ */
+ @NonNull
+ @Override
+ protected RedissonCacheObject doCreateCache(String name,Long expireTime, TimeUnit timeUnit){
+ return new RedissonCacheObject(name,expireTime,timeUnit);
+ }
+
+ /**
+ * Get the cache key which is used to store value in redisson.
+ */
+ protected String resolveCacheKey(String cacheName,String key){
+ return globalPrefix + ":" + cacheName + ":" + key;
+ }
+
+ /**
+ * Resolve cache value.
+ * @param value cache value
+ * @return cache value
+ */
+ protected Object resolveCacheValue(Object value){return value;}
+
+ /**
+ * Clean all cache value for a specified cache object.
+ */
+ protected void cleanCache(String cacheName) {
+ if (enableClearCache) {
+ String prefix = globalPrefix + ":" + cacheName + ":*";
+
+ long deletedCount = 0;
+ for (String key : redissonClient.getKeys().getKeysByPattern(prefix)) {
+ RBucket