|
@@ -0,0 +1,59 @@
|
|
|
|
+package cn.com.qmth.examcloud.support.redis;
|
|
|
|
+
|
|
|
|
+import java.lang.reflect.Method;
|
|
|
|
+
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.springframework.cglib.proxy.Enhancer;
|
|
|
|
+import org.springframework.cglib.proxy.MethodInterceptor;
|
|
|
|
+import org.springframework.cglib.proxy.MethodProxy;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * redis key helper
|
|
|
|
+ *
|
|
|
|
+ * @author WANGWEI
|
|
|
|
+ * @date 2019年12月12日
|
|
|
|
+ * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
|
|
|
|
+ */
|
|
|
|
+public class RedisKeyHelper {
|
|
|
|
+
|
|
|
|
+ private static RedisKeyBuilder redisKeyBuilder;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 创建 {@link RedisKeyBuilder} 实例
|
|
|
|
+ *
|
|
|
|
+ * @author WANGWEI
|
|
|
|
+ */
|
|
|
|
+ private static void newInstance() {
|
|
|
|
+ Enhancer enhancer = new Enhancer();
|
|
|
|
+ enhancer.setSuperclass(RedisKeyBuilder.class);
|
|
|
|
+ enhancer.setCallback(new MethodInterceptor() {
|
|
|
|
+ @Override
|
|
|
|
+ public Object intercept(Object obj, Method method, Object[] objects,
|
|
|
|
+ MethodProxy methodProxy) throws Throwable {
|
|
|
|
+ RedisKeyDefine define = method.getAnnotation(RedisKeyDefine.class);
|
|
|
|
+ String prefix = define.Prefix();
|
|
|
|
+ String key = prefix + ":" + StringUtils.join(objects, '_');
|
|
|
|
+ return key;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ redisKeyBuilder = (RedisKeyBuilder) enhancer.create();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取 {@link RedisKeyBuilder} 实例
|
|
|
|
+ *
|
|
|
|
+ * @author WANGWEI
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static RedisKeyBuilder getBuilder() {
|
|
|
|
+ if (null == redisKeyBuilder) {
|
|
|
|
+ synchronized (RedisKeyHelper.class) {
|
|
|
|
+ if (null == redisKeyBuilder) {
|
|
|
|
+ newInstance();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return redisKeyBuilder;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|