From e5d4d9daea6c6f61f16f4159aaec4fde3005f1ac Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Tue, 26 Dec 2023 10:24:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E9=A6=96=E9=A1=B5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AD=98=E6=94=BE=E5=9C=A8redis=E4=B8=AD=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/inspectionProfiles/Project_Default.xml | 1 + .idea/workspace.xml | 73 ++++++++++--------- spzx-service/pom.xml | 10 +++ .../bunny/web/product/ProductApplication.java | 2 + .../bunny/web/product/config/RedisConfig.java | 53 ++++++++++++++ .../web/product/mapper/ProductSkuMapper.java | 1 + .../web/product/service/ProductService.java | 1 + .../service/imp/CategoryServiceImpl.java | 1 + .../service/imp/ProductServiceImpl.java | 27 +++++++ .../src/main/resources/application-dev.yml | 4 + 10 files changed, 139 insertions(+), 34 deletions(-) create mode 100644 spzx-service/service-product/src/main/java/cn/bunny/web/product/config/RedisConfig.java diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 30e75dc..df280b1 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,5 +2,6 @@ \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e37ea40..1e7bc0f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,21 +4,16 @@ - + - - - - - + @@ -169,7 +154,7 @@ 1703487755445 - + - @@ -204,6 +197,18 @@ - + + + + + file://$PROJECT_DIR$/spzx-service/service-product/src/main/java/cn/bunny/web/product/config/RedisConfig.java + 33 + + + \ No newline at end of file diff --git a/spzx-service/pom.xml b/spzx-service/pom.xml index 2ece3cc..786c818 100644 --- a/spzx-service/pom.xml +++ b/spzx-service/pom.xml @@ -79,5 +79,15 @@ com.alibaba.cloud spring-cloud-starter-alibaba-sentinel + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-cache + diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/ProductApplication.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/ProductApplication.java index a567531..79793ec 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/ProductApplication.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/ProductApplication.java @@ -2,8 +2,10 @@ package cn.bunny.web.product; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication +@EnableCaching public class ProductApplication { public static void main(String[] args) { SpringApplication.run(ProductApplication.class, args); diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/config/RedisConfig.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/config/RedisConfig.java new file mode 100644 index 0000000..a14d3ae --- /dev/null +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/config/RedisConfig.java @@ -0,0 +1,53 @@ +package cn.bunny.web.product.config; + +import org.springframework.cache.CacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.time.Duration; + +@Configuration +public class RedisConfig { + @Bean + public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(lettuceConnectionFactory); + + // 设置key序列化为String + redisTemplate.setKeySerializer(new StringRedisSerializer()); + // 设置value序列化方式为JSON,使用GenericJackson2JsonRedisSerializer替换为默认序列化 + redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); + + return redisTemplate; + } + + @Bean + public CacheManager cacheManager(LettuceConnectionFactory connectionFactory) { + + //定义序列化器 + GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); + StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); + + + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() + //过期时间600秒 + .entryTtl(Duration.ofSeconds(600)) + // 配置序列化 + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer)) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer)); + + return RedisCacheManager.builder(connectionFactory) + .cacheDefaults(config) + .build(); + } +} diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java index b95b68f..4d86d87 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/mapper/ProductSkuMapper.java @@ -1,5 +1,6 @@ package cn.bunny.web.product.mapper; +import cn.bunny.common.spzx.model.entity.product.Category; import cn.bunny.common.spzx.model.entity.product.ProductSku; import org.apache.ibatis.annotations.Mapper; diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java index 41c3cb4..75fe675 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/ProductService.java @@ -1,5 +1,6 @@ package cn.bunny.web.product.service; +import cn.bunny.common.spzx.model.entity.product.Category; import cn.bunny.common.spzx.model.entity.product.ProductSku; import java.util.List; diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/CategoryServiceImpl.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/CategoryServiceImpl.java index 2738e48..c708c7d 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/CategoryServiceImpl.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/CategoryServiceImpl.java @@ -4,6 +4,7 @@ import cn.bunny.common.spzx.model.entity.product.Category; import cn.bunny.web.product.mapper.CategoryMapper; import cn.bunny.web.product.service.CategoryService; import jakarta.annotation.Resource; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.List; diff --git a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java index 30b2098..712daab 100644 --- a/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java +++ b/spzx-service/service-product/src/main/java/cn/bunny/web/product/service/imp/ProductServiceImpl.java @@ -3,18 +3,45 @@ package cn.bunny.web.product.service.imp; import cn.bunny.common.spzx.model.entity.product.ProductSku; import cn.bunny.web.product.mapper.ProductSkuMapper; import cn.bunny.web.product.service.ProductService; +import com.alibaba.fastjson.JSON; +import com.alibaba.nacos.common.utils.StringUtils; import jakarta.annotation.Resource; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; @Service public class ProductServiceImpl implements ProductService { @Resource private ProductSkuMapper productSkuMapper; + @Resource + private RedisTemplate redisTemplate; + @Cacheable(value = "productSku", key = "'one'") @Override public List selectProductSkuBySal() { +/* // 1. 查询redis是否有一级分类 + Object productSkuJson = redisTemplate.opsForValue().get("productSku:one"); + String productSkuJsonString = JSON.toJSONString(productSkuJson); + + // 2. 如果存在一级分类直接返回即可 + if (!Objects.equals(productSkuJsonString, "null")) { + return JSON.parseArray(productSkuJsonString); + } + // 3. 如果redis没有一级分类,查询数据库,把数据库内容返回,并且查询放到redis中 + List productSkuList = productSkuMapper.selectProductSkuBySale(); + redisTemplate.opsForValue() + .set("productSku:one", JSON.toJSON(productSkuList), 7, TimeUnit.DAYS); + return productSkuList; */ + Object productSkuJson = redisTemplate.opsForValue().get("productSku:one"); + String productSkuJsonString = JSON.toJSONString(productSkuJson); + if (!Objects.equals(productSkuJsonString, "null")) { + return JSON.parseArray(productSkuJsonString); + } return productSkuMapper.selectProductSkuBySale(); } } diff --git a/spzx-service/service-product/src/main/resources/application-dev.yml b/spzx-service/service-product/src/main/resources/application-dev.yml index 9a5a190..cb3a4aa 100644 --- a/spzx-service/service-product/src/main/resources/application-dev.yml +++ b/spzx-service/service-product/src/main/resources/application-dev.yml @@ -16,6 +16,10 @@ spring: url: jdbc:mysql://60.204.230.80:3306/db_spzx?characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true username: root password: "02120212" + data: + redis: + port: 6379 + host: 192.168.2.156 mybatis: config-location: classpath:mybatis-config.xml