From d7c67dee8b264c7faa5484f6a591b9fd88f43d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E4=B9=90?= <419641032@qq.com> Date: Wed, 26 Aug 2020 10:47:04 +0800 Subject: [PATCH] =?UTF-8?q?config=20=E6=95=B0=E6=8D=AEredis=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/constants/Constants.java | 4 + crmeb/src/main/java/com/utils/RedisUtil.java | 22 +- .../com/zbkj/crmeb/config/RedisConfig.java | 26 +-- .../system/service/SystemConfigService.java | 11 - .../service/impl/SystemConfigServiceImpl.java | 206 ++++++++++-------- .../upload/service/impl/AsyncServiceImpl.java | 2 +- 6 files changed, 142 insertions(+), 129 deletions(-) diff --git a/crmeb/src/main/java/com/constants/Constants.java b/crmeb/src/main/java/com/constants/Constants.java index 8d8dba49..2161a9b2 100644 --- a/crmeb/src/main/java/com/constants/Constants.java +++ b/crmeb/src/main/java/com/constants/Constants.java @@ -131,6 +131,10 @@ public class Constants { public static final String WE_CHAT_MESSAGE_KEY_PROGRAM = "we_chat_program_message_list"; public static final String WE_CHAT_MESSAGE_INDUSTRY_KEY = "we_chat_message_industry"; + //config表数据redis + public static final String CONFIG_LIST = "config_list"; //配置列表 + + //快递信息缓存 public static final String LOGISTICS_KEY = "logistics_"; diff --git a/crmeb/src/main/java/com/utils/RedisUtil.java b/crmeb/src/main/java/com/utils/RedisUtil.java index 973f315f..48a3b8f2 100644 --- a/crmeb/src/main/java/com/utils/RedisUtil.java +++ b/crmeb/src/main/java/com/utils/RedisUtil.java @@ -1,17 +1,13 @@ package com.utils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.*; +import org.springframework.stereotype.Component; + import java.io.Serializable; import java.util.List; import java.util.Set; import java.util.concurrent.TimeUnit; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.HashOperations; -import org.springframework.data.redis.core.ListOperations; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.SetOperations; -import org.springframework.data.redis.core.ValueOperations; -import org.springframework.data.redis.core.ZSetOperations; -import org.springframework.stereotype.Component; /** * redis工具类 @@ -182,6 +178,16 @@ public class RedisUtil { return hash.get(key, hashKey); } + /** + * 哈希数量 + * @param key string key + * @author Mr.Zhang + * @return Object + * @since 2020-04-13 + */ + public Long getHashSize(String key) { + return redisTemplate.opsForHash().size(key); + } /** * 列表添加左边添加 diff --git a/crmeb/src/main/java/com/zbkj/crmeb/config/RedisConfig.java b/crmeb/src/main/java/com/zbkj/crmeb/config/RedisConfig.java index bd675633..f2197836 100644 --- a/crmeb/src/main/java/com/zbkj/crmeb/config/RedisConfig.java +++ b/crmeb/src/main/java/com/zbkj/crmeb/config/RedisConfig.java @@ -11,7 +11,6 @@ import org.springframework.context.annotation.Primary; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @@ -86,22 +85,23 @@ public class RedisConfig { } @Bean - public RedisTemplate redisTemplate(){ - RedisTemplate template = new RedisTemplate(); - template.setConnectionFactory(taskConnectionFactory()); - - Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = - new Jackson2JsonRedisSerializer(Object.class); + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ + //设置序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); - - template.setKeySerializer(new StringRedisSerializer()); - template.setValueSerializer(jackson2JsonRedisSerializer); - - template.afterPropertiesSet(); - return template; + //配置redisTemplate + RedisTemplate redisTemplate = new RedisTemplate(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + RedisSerializer stringSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringSerializer);//key序列化 + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);//value序列化 + redisTemplate.setHashKeySerializer(stringSerializer);//Hash key序列化 + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);//Hash value序列化 + redisTemplate.afterPropertiesSet(); + return redisTemplate; } } diff --git a/crmeb/src/main/java/com/zbkj/crmeb/system/service/SystemConfigService.java b/crmeb/src/main/java/com/zbkj/crmeb/system/service/SystemConfigService.java index c7624482..51c6eace 100644 --- a/crmeb/src/main/java/com/zbkj/crmeb/system/service/SystemConfigService.java +++ b/crmeb/src/main/java/com/zbkj/crmeb/system/service/SystemConfigService.java @@ -18,13 +18,6 @@ public interface SystemConfigService extends IService { String getValueByKey(String key); - /** - * 根据key更新值 - * @param key key - * @return 更新结果 - */ - boolean setValueByKey(String key, String value); - /** * 同时获取多个配置 * @param keys 多个配置key @@ -32,14 +25,10 @@ public interface SystemConfigService extends IService { */ List getValuesByKes(List keys); - boolean updateValueByName(String name, String value); - boolean updateOrSaveValueByName(String name, String value); String getValueByKeyException(String key); - String getValueByKeyNotStatus(String key); - boolean saveForm(SystemFormCheckRequest systemFormCheckRequest); HashMap info(Integer formId); diff --git a/crmeb/src/main/java/com/zbkj/crmeb/system/service/impl/SystemConfigServiceImpl.java b/crmeb/src/main/java/com/zbkj/crmeb/system/service/impl/SystemConfigServiceImpl.java index f1821e59..6f81f573 100644 --- a/crmeb/src/main/java/com/zbkj/crmeb/system/service/impl/SystemConfigServiceImpl.java +++ b/crmeb/src/main/java/com/zbkj/crmeb/system/service/impl/SystemConfigServiceImpl.java @@ -1,11 +1,12 @@ package com.zbkj.crmeb.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.common.PageParamRequest; +import com.constants.Constants; import com.exception.CrmebException; import com.github.pagehelper.PageHelper; +import com.utils.RedisUtil; import com.zbkj.crmeb.system.dao.SystemConfigDao; import com.zbkj.crmeb.system.model.SystemConfig; import com.zbkj.crmeb.system.request.SystemFormCheckRequest; @@ -39,6 +40,11 @@ public class SystemConfigServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.select(SystemConfig::getValue).eq(SystemConfig::getName, name); - lambdaQueryWrapper.eq(SystemConfig::getStatus, false); - - SystemConfig systemConfig = dao.selectOne(lambdaQueryWrapper); - - String value = null; - if(null != systemConfig && StringUtils.isNotBlank(systemConfig.getValue())){ - value = systemConfig.getValue(); - } - return value; + return get(name); } - /** - * 根据key更新值 - * @param key key - * @return 更新结果 - */ - @Override - public boolean setValueByKey(String key, String value) { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(SystemConfig::getValue, value); - lambdaQueryWrapper.eq(SystemConfig::getStatus, false); - SystemConfig systemConfig = dao.selectOne(lambdaQueryWrapper); - systemConfig.setValue(value); - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - lambdaUpdateWrapper.set(SystemConfig::getValue, value); - lambdaUpdateWrapper.eq(SystemConfig::getName, key); - return dao.update(systemConfig, lambdaUpdateWrapper) > 0; - } - /** * 同时获取多个配置 * @param keys 多个配置key @@ -126,32 +104,12 @@ public class SystemConfigServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.select(SystemConfig::getValue, SystemConfig::getTitle). - eq(SystemConfig::getStatus, false). - eq(SystemConfig::getName, name); - - SystemConfig systemConfig = dao.selectOne(lambdaQueryWrapper); - if(null == systemConfig){ + String value = get(name); + if(null == value){ throw new CrmebException("没有找到"+ name +"数据"); } - if(StringUtils.isBlank(systemConfig.getValue())){ - throw new CrmebException("配置项 " + systemConfig.getTitle() + " 没有配置, 请配置!"); - } - return systemConfig.getValue(); - } - - @Override - public String getValueByKeyNotStatus(String key) { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.select(SystemConfig::getValue).eq(SystemConfig::getName, key); - - SystemConfig systemConfig = dao.selectOne(lambdaQueryWrapper); - if(StringUtils.isBlank(systemConfig.getValue())){ - systemConfig.setValue(null); - } - return systemConfig.getValue(); + return value; } /** @@ -190,6 +148,8 @@ public class SystemConfigServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); //删除已经隐藏的数据 lambdaQueryWrapper.eq(SystemConfig::getFormId, formId).eq(SystemConfig::getStatus, true); + List systemConfigList = dao.selectList(lambdaQueryWrapper); dao.delete(lambdaQueryWrapper); + async(systemConfigList); } - /** - * 根据menu name更新 value - * @param name menu name - * @param value 值 - * @author Mr.Zhang - * @since 2020-04-16 - * @return JSONObject - */ - @Override - public boolean updateValueByName(String name, String value){ - value = systemAttachmentService.clearPrefix(value); - - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(SystemConfig::getName, name).eq(SystemConfig::getValue, value); - SystemConfig systemConfig = dao.selectOne(lambdaQueryWrapper); - if(systemConfig != null){ - systemConfig.setValue(systemAttachmentService.clearPrefix(value)); - updateById(systemConfig); - return true; - } - - return false; - } /** * 保存或更新配置数据 @@ -265,33 +205,18 @@ public class SystemConfigServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.eq(SystemConfig::getStatus, false).eq(SystemConfig::getId, id); - SystemConfig systemConfig = dao.selectOne(lambdaQueryWrapper); - if(systemConfig == null){ - throw new CrmebException("没有找到相对应的数据!"); - } - - return systemConfig; - } /** - * 根据id查询数据 + * 根据formId查询数据 * @param formId Integer id * @author Mr.Zhang * @since 2020-04-16 @@ -322,10 +247,99 @@ public class SystemConfigServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(SystemConfig::getName, name); - SystemConfig systemConfig = dao.selectOne(lambdaQueryWrapper); - return systemConfig == null; + List systemConfigList = dao.selectList(lambdaQueryWrapper); + if(systemConfigList.size() == 0){ + //说明数据已经被删除了 + deleteRedis(name); + return; + } + + async(systemConfigList); + } + + /** + * 把数据同步到redis + * @param systemConfigList List 需要同步的数据 + * @author Mr.Zhang + * @since 2020-04-16 + * @return JSONObject + */ + private void async(List systemConfigList){ + for (SystemConfig systemConfig : systemConfigList) { + if(systemConfig.getStatus()){ + //隐藏之后,删除redis的数据 + deleteRedis(systemConfig.getName()); + continue; + } + redisUtil.hmSet(redisKey, systemConfig.getName(), systemConfig.getValue()); + } + } + + /** + * 把数据同步到redis + * @param name String + * @author Mr.Zhang + * @since 2020-04-16 + * @return JSONObject + */ + private void deleteRedis(String name){ + redisUtil.hmDelete(redisKey, name); + } + + /** + * 把数据同步到redis + * @param name String + * @author Mr.Zhang + * @since 2020-04-16 + * @return JSONObject + */ + private String get(String name){ + setRedisByVoList(); + Object data = redisUtil.hmGet(redisKey, name); + if(null == data || StringUtils.isBlank(data.toString())){ + //没有找到数据 + return null; + } + + //去数据库查找,然后写入redis + + + return data.toString(); + } + + /** + * 把数据同步到redis, 此方法适用于redis为空的时候进行一次批量输入 + * @author Mr.Zhang + * @since 2020-04-16 + * @return JSONObject + */ + private void setRedisByVoList(){ + //检测redis是否为空 + Long size = redisUtil.getHashSize(redisKey); + if(size > 0){ + return; + } + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(SystemConfig::getStatus, false); + List systemConfigList = dao.selectList(lambdaQueryWrapper); + async(systemConfigList); } } diff --git a/crmeb/src/main/java/com/zbkj/crmeb/upload/service/impl/AsyncServiceImpl.java b/crmeb/src/main/java/com/zbkj/crmeb/upload/service/impl/AsyncServiceImpl.java index e4d09875..d055af66 100644 --- a/crmeb/src/main/java/com/zbkj/crmeb/upload/service/impl/AsyncServiceImpl.java +++ b/crmeb/src/main/java/com/zbkj/crmeb/upload/service/impl/AsyncServiceImpl.java @@ -231,7 +231,7 @@ public class AsyncServiceImpl implements AsyncService { break; } - return systemConfigService.getValueByKeyNotStatus(pre+"UploadUrl"); + return systemConfigService.getValueByKey(pre+"UploadUrl"); } }