From 7e3cda8462b5b635ee68dbda1b5bad2b5214a895 Mon Sep 17 00:00:00 2001 From: xiaohanzi Date: Thu, 3 Sep 2020 23:46:24 +0800 Subject: [PATCH] fix cache --- .../java/com/iformall/config/RedisConfig.java | 137 ++++++++---------- .../iformall/controller/BaseController.java | 30 ++-- .../com/iformall/domain/po/WxLevelConfig.java | 2 - .../domain/po/base/BaseCUserEntity.java | 5 + .../service/impl/CUserTokenServiceImpl.java | 37 ++--- .../service/impl/WxAppinfoServiceImpl.java | 54 +++---- .../impl/WxLevelConfigServiceImpl.java | 23 +-- .../com/iformall/utils/RedisCacheUtils.java | 106 ++++++++++++++ .../java/com/iformall/utils/RedisUtils.java | 1 + 9 files changed, 228 insertions(+), 167 deletions(-) create mode 100644 mallinkService/src/main/java/com/iformall/utils/RedisCacheUtils.java diff --git a/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java b/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java index 353b63381..c3d6eeb38 100644 --- a/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java +++ b/mallinkCApi/src/main/java/com/iformall/config/RedisConfig.java @@ -65,47 +65,47 @@ public class RedisConfig extends CachingConfigurerSupport { @Bean("pushLimitRedisTemplate") public RedisTemplate getPushLimitRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(PushLimit.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("scoreRuleRedisTemplate") public RedisTemplate getScoreRuleRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxScoreRules.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("cuserTokenRedisTemplate") public RedisTemplate getCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUser.class); ObjectMapper om = new ObjectMapper(); @@ -114,13 +114,13 @@ public class RedisConfig extends CachingConfigurerSupport { // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @@ -128,6 +128,7 @@ public class RedisConfig extends CachingConfigurerSupport { public RedisTemplate getBaseCUserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(BaseCUserEntity.class); ObjectMapper om = new ObjectMapper(); @@ -136,20 +137,20 @@ public class RedisConfig extends CachingConfigurerSupport { // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("cUserBasicInfoRedisTemplate") public RedisTemplate getCUserBasicInfoRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCUserBasicInfo.class); ObjectMapper om = new ObjectMapper(); @@ -157,20 +158,20 @@ public class RedisConfig extends CachingConfigurerSupport { j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("mallRedisTemplate") public RedisTemplate getMallRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxMall.class); ObjectMapper om = new ObjectMapper(); @@ -178,60 +179,60 @@ public class RedisConfig extends CachingConfigurerSupport { j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("subMallListRedisTemplate") public RedisTemplate> getSubMallListRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate> template = new RedisTemplate>(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(List.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("couponDetailRedisTemplate") public RedisTemplate getCouponDetailRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxCouponCVo.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("couponChannelRedisTemplate") public RedisTemplate> getCouponChannelRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate> template = new RedisTemplate<>(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(PageInfo.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); @@ -239,20 +240,20 @@ public class RedisConfig extends CachingConfigurerSupport { // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("buserTokenRedisTemplate") public RedisTemplate getBuserTokenRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); - + template.setConnectionFactory(connectionFactory); Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxBuser.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); @@ -260,84 +261,62 @@ public class RedisConfig extends CachingConfigurerSupport { // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } @Bean("pressOrderRedisTemplate") public RedisTemplate getPressOrderRedisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate<>(); - - Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxOrder.class); + template.setConnectionFactory(connectionFactory); + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxOrder.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); + template.afterPropertiesSet(); + return template; } - @Bean("wxAppinfoRedisTemplate") - public RedisTemplate getWxAppinfoRedisTemplate(RedisConnectionFactory connectionFactory) { - RedisTemplate template = new RedisTemplate<>(); - - Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(WxAppinfo.class); - ObjectMapper om = new ObjectMapper(); - om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - j.setObjectMapper(om); - - // value值的序列化 - template.setValueSerializer(j); - template.setHashKeySerializer(j); - - // key的序列化 - template.setKeySerializer(new StringRedisSerializer()); - template.setHashKeySerializer(new StringRedisSerializer()); - + @Bean("stringValueOperations") + public ValueOperations getStringValueOperations(RedisConnectionFactory connectionFactory) { + StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(connectionFactory); - return template; + template.afterPropertiesSet(); + return template.opsForValue(); } - - @Bean("wxLevelConfigListRedisTemplate") - public RedisTemplate> getWxLevelConfigListRedisTemplate(RedisConnectionFactory connectionFactory) { - RedisTemplate> template = new RedisTemplate<>(); - - Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(List.class); + + @Bean("objectCommonRedisTemplate") + public RedisTemplate getObjectValueOperations(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + Jackson2JsonRedisSerializer j = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); j.setObjectMapper(om); // value值的序列化 template.setValueSerializer(j); - template.setHashKeySerializer(j); + template.setHashValueSerializer(j); // key的序列化 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); - - template.setConnectionFactory(connectionFactory); - return template; - } - - @Bean("stringValueOperations") - public ValueOperations getStringValueOperations(RedisConnectionFactory connectionFactory) { - StringRedisTemplate template = new StringRedisTemplate(); - template.setConnectionFactory(connectionFactory); template.afterPropertiesSet(); - return template.opsForValue(); + return template; } } diff --git a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java index d941ebdfd..1234b42f2 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/BaseController.java @@ -19,6 +19,8 @@ import com.iformall.service.wechat.FmOpenService; import com.iformall.utils.Constant; import com.iformall.utils.IPUtil; import com.iformall.utils.MaUtil; +import com.iformall.utils.RedisCacheUtils; + import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -58,8 +60,8 @@ public class BaseController { private CUserTokenService cUserTokenService; @Autowired - @Qualifier("cUserBasicInfoRedisTemplate") - RedisTemplate cuserBasicInfoTemplate; + @Qualifier("objectCommonRedisTemplate") + RedisTemplate cuserBasicInfoTemplate; @InitBinder public void InitBinder(WebDataBinder dataBinder) { @@ -131,7 +133,7 @@ public class BaseController { if (baseuser.getRealUser() == null) { throw new MallinkException(ErrorCode.USER_IS_EMPTY); } - WxCUser user = (WxCUser) baseuser.getRealUser(); + WxCUser user = baseuser.getRealUserObject(WxCUser.class); TenantEntity tenantEntity = getTenantInfo(); if (user.getTenantId() == null) { user.setTenantId(tenantEntity.getTenantId()); @@ -153,21 +155,16 @@ public class BaseController { } private WxCUserBasicInfo getCacheMember(Long memberId,String key,long seconds) throws Exception { - ValueOperations operations = cuserBasicInfoTemplate.opsForValue(); - WxCUserBasicInfo member; // 缓存 - boolean hasKey = cuserBasicInfoTemplate.hasKey(key); - if(hasKey) { - member = operations.get(key); - return member; - }else { + WxCUserBasicInfo member = RedisCacheUtils.getCacheObject(cuserBasicInfoTemplate, key, WxCUserBasicInfo.class); + if(null == member) { member = wxCUserBasicInfoService.getById(memberId); if (member == null) { throw new MallinkException(ErrorCode.USER_IS_EMPTY); } - operations.set(key, member, seconds, TimeUnit.SECONDS); + RedisCacheUtils.cache(cuserBasicInfoTemplate, key, member, seconds); } - return operations.get(key); + return member; } public WxCUserBasicInfo getCacheMember() throws Exception { @@ -184,14 +181,9 @@ public class BaseController { public void removeCacheMember(Long memberId) { String key = "webapp:member:"+memberId; - if (cuserBasicInfoTemplate.hasKey(key)) { - cuserBasicInfoTemplate.delete(key); - } - + RedisCacheUtils.removeCache(cuserBasicInfoTemplate, key); String shortKey = "webapp:short:member:"+memberId; - if (cuserBasicInfoTemplate.hasKey(shortKey)) { - cuserBasicInfoTemplate.delete(shortKey); - } + RedisCacheUtils.removeCache(cuserBasicInfoTemplate, shortKey); } // public WxCUserBasicInfo getMember() throws Exception { // Long memberId = getMemberId(); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java b/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java index 0f892bda3..1dc668a2d 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxLevelConfig.java @@ -2,14 +2,12 @@ package com.iformall.domain.po; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.iformall.domain.po.base.BaseTenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.*; -@JsonIgnoreProperties(value = {"handler"}) @TableName(value = "wx_level_config") @Data @EqualsAndHashCode(callSuper = true) diff --git a/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java b/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java index e9317eb81..95ddd24e0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/base/BaseCUserEntity.java @@ -1,5 +1,6 @@ package com.iformall.domain.po.base; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.iformall.utils.Constant; @@ -35,6 +36,10 @@ public class BaseCUserEntity extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="真实对象如wxCUser",name="realUser") @TableField(exist = false) private Object realUser; + + public T getRealUserObject(Class clazz) { + return JSON.parseObject(JSON.toJSONString(realUser), clazz); + } /** * 是否是会员 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java index fee337687..17e8a36dd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/CUserTokenServiceImpl.java @@ -8,16 +8,14 @@ import com.iformall.mapper.WxCUserMapper; import com.iformall.service.CUserTokenService; import com.iformall.service.cuser.CUserServiceFactory; import com.iformall.utils.Constant; +import com.iformall.utils.RedisCacheUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; -import java.util.concurrent.TimeUnit; - @Service public class CUserTokenServiceImpl implements CUserTokenService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -26,8 +24,8 @@ public class CUserTokenServiceImpl implements CUserTokenService { WxCUserMapper wxCUserMapper; @Autowired - @Qualifier("baseCUserTokenRedisTemplate") - RedisTemplate baseCUserTokenRedisTemplate; + @Qualifier("objectCommonRedisTemplate") + RedisTemplate baseCUserTokenRedisTemplate; @Autowired CUserServiceFactory cuserFactory; @@ -42,42 +40,29 @@ public class CUserTokenServiceImpl implements CUserTokenService { private void setCache(String token,BaseCUserEntity baseUser) { if (null != baseUser) { String key = Constant.tokenPrev + token; - ValueOperations operations = baseCUserTokenRedisTemplate.opsForValue(); - operations.set(key, baseUser, 3600*24*3, TimeUnit.SECONDS); + RedisCacheUtils.cache(baseCUserTokenRedisTemplate, key, baseUser, 3600*24*3); } } @Override public BaseCUserEntity getByToken(String token) { - BaseCUserEntity baseUser = null; - logger.info("获取用户信息start ..." + token); String key = Constant.tokenPrev + token; - ValueOperations operations = baseCUserTokenRedisTemplate.opsForValue(); - - // 缓存 - boolean hasKey = baseCUserTokenRedisTemplate.hasKey(key); - if(hasKey) { - // 从缓存获取用户信息 - baseUser = operations.get(key); - logger.info("缓存中获取用户信息End-" + token); - return baseUser; + + BaseCUserEntity baseUser =RedisCacheUtils.getCacheObject(baseCUserTokenRedisTemplate, key, BaseCUserEntity.class); + + if(null == baseUser) { + baseUser = cuserFactory.getCUserService(getPlat(token)).getByToken(token); + setCache(token,baseUser); } - baseUser = cuserFactory.getCUserService(getPlat(token)).getByToken(token); - setCache(token,baseUser); - //operations.set(key, user, 3600, TimeUnit.SECONDS); - //logger.info("DB中获取用户信息End-" + token); return baseUser; } @Override public void removeTokenCache(String token) { String key = Constant.tokenPrev + token; - boolean hasKey = baseCUserTokenRedisTemplate.hasKey(key); - if (hasKey) { - baseCUserTokenRedisTemplate.delete(key); - } + RedisCacheUtils.removeCache(baseCUserTokenRedisTemplate, key); } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java index 9bd0af50a..c1caa28fa 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java @@ -12,6 +12,8 @@ import com.iformall.enums.EnumPayWay; import com.iformall.mapper.WxAppinfoMapper; import com.iformall.service.WxAppinfoService; import com.iformall.utils.Constant; +import com.iformall.utils.RedisCacheUtils; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -31,8 +33,8 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { WxAppinfoMapper wxAppinfoMapper; @Autowired - @Qualifier("wxAppinfoRedisTemplate") - RedisTemplate wxAppinfoRedisTemplate; + @Qualifier("objectCommonRedisTemplate") + RedisTemplate wxAppinfoRedisTemplate; @Override public WxAppinfo getCAppInfo(TenantEntity tenantEntity,EnumPayWay payWay) { @@ -115,15 +117,12 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { public WxAppinfo getByAppIdFromRedis(String appId) { WxAppinfo record = null; String key = Constant.appinfoPrev + appId; - ValueOperations operations = wxAppinfoRedisTemplate.opsForValue(); - - if(wxAppinfoRedisTemplate.hasKey(key)){ - record = operations.get(key); - return record; - } - record = this.getByAppId(appId); - if(record != null){ - operations.set(key, record, 7, TimeUnit.DAYS); + record = RedisCacheUtils.getCacheObject(wxAppinfoRedisTemplate, key, WxAppinfo.class); + if (null == record) { + record = this.getByAppId(appId); + if(record != null){ + RedisCacheUtils.cache(wxAppinfoRedisTemplate, key, record, 3600*24*7); + } } return record; } @@ -132,15 +131,12 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { public WxAppinfo getByIdFromRedis(Long id) { WxAppinfo record = null; String key = Constant.appinfoPrev + id; - ValueOperations operations = wxAppinfoRedisTemplate.opsForValue(); - - if(wxAppinfoRedisTemplate.hasKey(key)){ - record = operations.get(key); - return record; - } - record = this.getById(id); - if(record != null){ - operations.set(key, record, 7, TimeUnit.DAYS); + record = RedisCacheUtils.getCacheObject(wxAppinfoRedisTemplate, key, WxAppinfo.class); + if (null == record) { + record = this.getById(id); + if(record != null){ + RedisCacheUtils.cache(wxAppinfoRedisTemplate, key, record, 3600*24*7); + } } return record; } @@ -150,16 +146,14 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { WxAppinfo record = null; String key = Constant.appinfoPrev + tenantId + "-" + payWayWechat.getPlat() + "-" + EnumAppType.C.getCode(); - ValueOperations operations = wxAppinfoRedisTemplate.opsForValue(); - if(wxAppinfoRedisTemplate.hasKey(key)){ - record = operations.get(key); - return record; - } - record = this.getCAppInfo(new TenantEntity() {{ - setTenantId(tenantId); - }}, payWayWechat); - if(record != null){ - operations.set(key, record, 7, TimeUnit.DAYS); + record = RedisCacheUtils.getCacheObject(wxAppinfoRedisTemplate, key, WxAppinfo.class); + if (null == record) { + record = this.getCAppInfo(new TenantEntity() {{ + setTenantId(tenantId); + }}, payWayWechat); + if(record != null){ + RedisCacheUtils.cache(wxAppinfoRedisTemplate, key, record, 3600*24*7); + } } return record; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java index 986a7ff20..2a369c1de 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxLevelConfigServiceImpl.java @@ -19,6 +19,8 @@ import com.iformall.mapper.WxLevelMerchantMapper; import com.iformall.service.WxCUserBasicInfoService; import com.iformall.service.WxLevelConfigService; import com.iformall.utils.Constant; +import com.iformall.utils.RedisCacheUtils; + import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,8 +56,8 @@ public class WxLevelConfigServiceImpl implements WxLevelConfigService { private WxCUserBasicInfoService wxCUserBasicInfoService; @Autowired - @Qualifier("wxLevelConfigListRedisTemplate") - RedisTemplate> wxLevelConfigListRedisTemplate; + @Qualifier("objectCommonRedisTemplate") + RedisTemplate wxLevelConfigListRedisTemplate; @Override public PageInfo listAsPage(TenantEntity tenantEntity,WxLevelConfig record, Integer pageIndex, Integer pageSize) { @@ -140,16 +142,15 @@ public class WxLevelConfigServiceImpl implements WxLevelConfigService { @Override public List getByTenantInfo(TenantEntity tenantEntity) { String key = Constant.levelConfigPrev + tenantEntity.getTenantId(); - ValueOperations> operations = wxLevelConfigListRedisTemplate.opsForValue(); - if(wxLevelConfigListRedisTemplate.hasKey(key)){ - return operations.get(key); + List clist = RedisCacheUtils.getCacheListObject(wxLevelConfigListRedisTemplate, key, WxLevelConfig.class); + if (null == clist || clist.size() <= 0) { + WxLevelConfig wxLevelConfig = new WxLevelConfig(); + wxLevelConfig.setTenantId(tenantEntity.getTenantId()); + wxLevelConfig.setSortColumns(BaseEntity.SortField.Points_ASC); + clist = wxLevelConfigMapper.findList(wxLevelConfig); + RedisCacheUtils.cache(wxLevelConfigListRedisTemplate, key, clist, 3600*24*7); } - WxLevelConfig wxLevelConfig = new WxLevelConfig(); - wxLevelConfig.setTenantId(tenantEntity.getTenantId()); - wxLevelConfig.setSortColumns(BaseEntity.SortField.Points_ASC); - List list = wxLevelConfigMapper.findList(wxLevelConfig); - operations.set(key, list, 7, TimeUnit.DAYS); - return list; + return clist; } @Override diff --git a/mallinkService/src/main/java/com/iformall/utils/RedisCacheUtils.java b/mallinkService/src/main/java/com/iformall/utils/RedisCacheUtils.java new file mode 100644 index 000000000..584d3383e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/RedisCacheUtils.java @@ -0,0 +1,106 @@ +package com.iformall.utils; + +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; + +public class RedisCacheUtils { + + private static T parseJson(String json,Class clazz) { + return JSON.parseObject(json,new TypeReference() {}); + } + + private static List parseListJson(String json,Class clazz) { + return JSON.parseObject(json,new TypeReference>() {}); + } + + private static Set parseSetJson(String json,Class clazz) { + return JSON.parseObject(json,new TypeReference>() {}); + } + + public static void cache(RedisTemplate template,String key, Object value,long seconds) { + ValueOperations operations = template.opsForValue(); + if (seconds > 0) { + operations.set(key, value, seconds,TimeUnit.SECONDS); + }else { + operations.set(key, value); + } + } + + public static T getCacheObject(RedisTemplate template,String key,Class clazz) { + if (template.hasKey(key)) { + ValueOperations operations = template.opsForValue(); + Object o = operations.get(key); + return parseJson(JSON.toJSONString(o), clazz); + } + return null; + } + + public static List getCacheListObject(RedisTemplate template,String key,Class clazz) { + if (template.hasKey(key)) { + ValueOperations operations = template.opsForValue(); + Object o = operations.get(key); + return parseListJson(JSON.toJSONString(o), clazz); + } + return null; + } + + public static Set getCacheSetObject(RedisTemplate template,String key,Class clazz) { + if (template.hasKey(key)) { + ValueOperations operations = template.opsForValue(); + Object o = operations.get(key); + return parseSetJson(JSON.toJSONString(o), clazz); + } + return null; + } + + public static Map getCacheMap(RedisTemplate template,String key) { + if (template.hasKey(key)) { + ValueOperations operations = template.opsForValue(); + Object o = operations.get(key); + return parseJson(JSON.toJSONString(o), Map.class); + } + return null; + } + + public static String getCacheString(RedisTemplate template,String key) { + if (template.hasKey(key)) { + ValueOperations operations = template.opsForValue(); + Object o = operations.get(key); + return JSON.toJSONString(o); + } + return null; + } + + public static Long getCacheLong(RedisTemplate template,String key) { + if (template.hasKey(key)) { + ValueOperations operations = template.opsForValue(); + Object o = operations.get(key); + return Long.parseLong(o.toString()); + } + return null; + } + + public static Integer getCacheInteger(RedisTemplate template,String key) { + if (template.hasKey(key)) { + ValueOperations operations = template.opsForValue(); + Object o = operations.get(key); + return new Integer(o.toString()); + } + return null; + } + + public static void removeCache(RedisTemplate template,String key) { + if (template.hasKey(key)) { + template.delete(key); + } + } + +} diff --git a/mallinkService/src/main/java/com/iformall/utils/RedisUtils.java b/mallinkService/src/main/java/com/iformall/utils/RedisUtils.java index 076740b54..d03361ba2 100644 --- a/mallinkService/src/main/java/com/iformall/utils/RedisUtils.java +++ b/mallinkService/src/main/java/com/iformall/utils/RedisUtils.java @@ -16,6 +16,7 @@ import java.util.concurrent.TimeUnit; * @date 2017-07-17 21:12 */ @Component +@Deprecated public class RedisUtils { @Autowired private RedisTemplate redisTemplate;