Browse Source

feat 缓存模块增加

1 month ago
parent
commit
158a82a494

+ 21 - 0
edu-travel-common/edu-travel-common-cache/pom.xml

@@ -22,6 +22,27 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>redis.clients</groupId>
+                    <artifactId>jedis</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>io.lettuce</groupId>
+                    <artifactId>lettuce-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+        </dependency>
+
+        <!--spring2.0集成redis所需common-pool2-->
+        <!-- 必须加上,jedis依赖此  -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
         </dependency>
         <!--redis end-->
         <!--cache start-->

+ 15 - 0
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/annotation/EnableRedis.java

@@ -0,0 +1,15 @@
+package edu.travel.cache.annotation;
+
+import edu.travel.cache.config.RedisConfig;
+import org.springframework.context.annotation.Import;
+import org.springframework.data.redis.connection.RedisConfiguration;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Import(RedisConfig.class)
+@Documented
+@Inherited
+public @interface EnableRedis {
+}

+ 17 - 0
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/annotation/EnableRedisCache.java

@@ -0,0 +1,17 @@
+package edu.travel.cache.annotation;
+
+import edu.travel.cache.config.EduTravelCacheConfig;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Import;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Import(EduTravelCacheConfig.class)
+@EnableCaching
+@Documented
+@Inherited
+public @interface EnableRedisCache {
+}

+ 53 - 3
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/config/EduTravelCacheConfig.java

@@ -5,16 +5,66 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.RedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.data.redis.serializer.*;
+import org.springframework.scripting.support.ResourceScriptSource;
 
 @Configuration
 public class EduTravelCacheConfig {
+//    @Autowired
+//    private RedisTemplate redisTemplate;
+//    @Autowired
+//    private RedisConnectionFactory redisConnectionFactory;
+    @Bean
+    public RedisCacheConfiguration redisCacheConfiguration(){
+        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
+//设置redis缓存值的序列化方式,此处采用json方式序列化
+        redisCacheConfiguration = redisCacheConfiguration.
+                serializeValuesWith(RedisSerializationContext.SerializationPair.
+                        fromSerializer(new GenericJackson2JsonRedisSerializer()));
+        return redisCacheConfiguration;
+    }
+
+
+
+//    @Bean
+//    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
+//        redisTemplate.setConnectionFactory(factory);
+//        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
+//        redisTemplate.setDefaultSerializer(serializer);
+//        //设置序列化Key的实例化对象
+//        redisTemplate.setKeySerializer(new StringRedisSerializer());
+//        //设置序列化Value的实例化对象
+//        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+//
+//        return redisTemplate;
+//    }
+//
+//    @Bean
+//    public RedisMessageListenerContainer redisContainer() {
+//        final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
+//        container.setConnectionFactory(redisConnectionFactory);
+//        return container;
+//    }
+//
+//    @Bean
+//    public RedisScript<Long> limitRedisScript() {
+//        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+//        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("scripts/limit.lua")));
+//        redisScript.setResultType(Long.class);
+//        return redisScript;
+//    }
+
 
 //    @Bean(name = "redisTemplate")
 //    public RedisTemplate<String, Object> getRedisTemplate(RedisConnectionFactory factory) {

+ 51 - 0
edu-travel-common/edu-travel-common-cache/src/main/java/edu/travel/cache/config/RedisConfig.java

@@ -0,0 +1,51 @@
+package edu.travel.cache.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.core.script.RedisScript;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.scripting.support.ResourceScriptSource;
+
+@Configuration
+public class RedisConfig {
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private RedisConnectionFactory redisConnectionFactory;
+
+    @Bean
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
+        redisTemplate.setConnectionFactory(factory);
+        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
+        redisTemplate.setDefaultSerializer(serializer);
+        //设置序列化Key的实例化对象
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        //设置序列化Value的实例化对象
+        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
+
+        return redisTemplate;
+    }
+
+    @Bean
+    public RedisMessageListenerContainer redisContainer() {
+        final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
+        container.setConnectionFactory(redisConnectionFactory);
+        return container;
+    }
+
+    @Bean
+    public RedisScript<Long> limitRedisScript() {
+        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+        redisScript.setScriptSource(new ResourceScriptSource(new ClassPathResource("scripts/limit.lua")));
+        redisScript.setResultType(Long.class);
+        return redisScript;
+    }
+}

+ 5 - 4
edu-travel-oauth/pom.xml

@@ -75,10 +75,6 @@
             <artifactId>mybatis-plus-boot-starter</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis</artifactId>
-        </dependency>
-        <dependency>
             <groupId>com.nimbusds</groupId>
             <artifactId>nimbus-jose-jwt</artifactId>
         </dependency>
@@ -128,6 +124,11 @@
             <artifactId>edu-travel-common-resp</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-common-cache</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
     <profiles>
         <profile>

+ 3 - 0
edu-travel-oauth/src/main/java/edu/travel/OauthServerApplication.java

@@ -1,5 +1,7 @@
 package edu.travel;
 
+import edu.travel.cache.annotation.EnableRedis;
+import edu.travel.cache.annotation.EnableRedisCache;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -12,6 +14,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 @SpringBootApplication
 @EnableDiscoveryClient
 @MapperScan("edu.travel.mapper")
+@EnableRedisCache
 public class OauthServerApplication
 {
     public static void main( String[] args )

+ 1 - 1
edu-travel-oauth/src/main/java/edu/travel/service/UserServiceImpl.java

@@ -43,7 +43,7 @@ public class UserServiceImpl implements UserDetailsService {
             throw new UsernameNotFoundException("验证码为空");
         }
         if (code.equals(object.toString())){
-            redisTemplate.opsForValue().set(username+"_info", JSON.toJSONString(tenant));
+            redisTemplate.opsForValue().set("user_"+username+"_info", JSON.toJSONString(tenant));
             return new User(tenant.getTenantPhone(),code,new ArrayList<>());
         }
         throw new UsernameNotFoundException("验证码错误");

+ 3 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/TenantApplication.java

@@ -1,5 +1,7 @@
 package edu.travel;
 
+import edu.travel.cache.annotation.EnableRedis;
+import edu.travel.cache.annotation.EnableRedisCache;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -8,6 +10,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 @SpringBootApplication
 @EnableDiscoveryClient
 @MapperScan("edu.travel.tenant.mapper")
+@EnableRedisCache
 public class TenantApplication {
     public static void main(String[] args) {
         SpringApplication.run(TenantApplication.class, args);