!215 使用Spring Cache注解优化缓存

This commit is contained in:
MichelleChung 2022-08-13 15:35:55 +00:00 committed by 疯狂的狮子Li
parent 89c1e4f91d
commit 0936aaccea
13 changed files with 151 additions and 119 deletions

View File

@ -82,7 +82,7 @@ public class SysConfigController extends BaseController {
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
} }
return toAjax(configService.insertConfig(config)); return R.ok(configService.insertConfig(config));
} }
/** /**
@ -95,7 +95,7 @@ public class SysConfigController extends BaseController {
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
} }
return toAjax(configService.updateConfig(config)); return R.ok(configService.updateConfig(config));
} }
/** /**
@ -105,7 +105,7 @@ public class SysConfigController extends BaseController {
@Log(title = "参数管理", businessType = BusinessType.UPDATE) @Log(title = "参数管理", businessType = BusinessType.UPDATE)
@PutMapping("/updateByKey") @PutMapping("/updateByKey")
public R<Void> updateByKey(@RequestBody SysConfig config) { public R<Void> updateByKey(@RequestBody SysConfig config) {
return toAjax(configService.updateConfig(config)); return R.ok(configService.updateConfig(config));
} }
/** /**

View File

@ -86,7 +86,8 @@ public class SysDictDataController extends BaseController {
@Log(title = "字典数据", businessType = BusinessType.INSERT) @Log(title = "字典数据", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public R<Void> add(@Validated @RequestBody SysDictData dict) { public R<Void> add(@Validated @RequestBody SysDictData dict) {
return toAjax(dictDataService.insertDictData(dict)); dictDataService.insertDictData(dict);
return R.ok();
} }
/** /**
@ -96,7 +97,8 @@ public class SysDictDataController extends BaseController {
@Log(title = "字典数据", businessType = BusinessType.UPDATE) @Log(title = "字典数据", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public R<Void> edit(@Validated @RequestBody SysDictData dict) { public R<Void> edit(@Validated @RequestBody SysDictData dict) {
return toAjax(dictDataService.updateDictData(dict)); dictDataService.updateDictData(dict);
return R.ok();
} }
/** /**

View File

@ -72,7 +72,8 @@ public class SysDictTypeController extends BaseController {
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
return R.fail("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); return R.fail("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
} }
return toAjax(dictTypeService.insertDictType(dict)); dictTypeService.insertDictType(dict);
return R.ok();
} }
/** /**
@ -85,7 +86,8 @@ public class SysDictTypeController extends BaseController {
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
} }
return toAjax(dictTypeService.updateDictType(dict)); dictTypeService.updateDictType(dict);
return R.ok();
} }
/** /**

View File

@ -20,4 +20,19 @@ public interface CacheNames {
*/ */
String DEMO_CACHE = "demo:cache#60s#10m#20"; String DEMO_CACHE = "demo:cache#60s#10m#20";
/**
* 系统配置
*/
String SYS_CONFIG = "sys_config";
/**
* 数据字典
*/
String SYS_DICT = "sys_dict";
/**
* OSS配置
*/
String SYS_OSS_CONFIG = "sys_oss_config";
} }

View File

@ -0,0 +1,60 @@
package com.ruoyi.common.utils.cache;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.cache.CacheManager;
/**
* 缓存操作工具类 {@link }
*
* @author Michelle.Chung
* @date 2022/8/13
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@SuppressWarnings(value = {"unchecked", "rawtypes"})
public class CacheUtils {
private static final CacheManager CACHE_MANAGER = SpringUtils.getBean(CacheManager.class);
/**
* 获取缓存值
*
* @param cacheNames 缓存组名称
* @param key 缓存key
*/
public static Object get(String cacheNames, Object key) {
return CACHE_MANAGER.getCache(cacheNames).get(key).get();
}
/**
* 保存缓存值
*
* @param cacheNames 缓存组名称
* @param key 缓存key
* @param value 缓存值
*/
public static void put(String cacheNames, Object key, Object value) {
CACHE_MANAGER.getCache(cacheNames).put(key, value);
}
/**
* 删除缓存值
*
* @param cacheNames 缓存组名称
* @param key 缓存key
*/
public static void evict(String cacheNames, Object key) {
CACHE_MANAGER.getCache(cacheNames).evict(key);
}
/**
* 清空缓存值
*
* @param cacheNames 缓存组名称
*/
public static void clear(String cacheNames) {
CACHE_MANAGER.getCache(cacheNames).clear();
}
}

View File

@ -1,7 +1,9 @@
package com.ruoyi.oss.factory; package com.ruoyi.oss.factory;
import com.ruoyi.common.constant.CacheNames;
import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.cache.CacheUtils;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.oss.constant.OssConstant; import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.core.OssClient; import com.ruoyi.oss.core.OssClient;
@ -42,7 +44,7 @@ public class OssFactory {
*/ */
public static OssClient instance() { public static OssClient instance() {
// 获取redis 默认类型 // 获取redis 默认类型
String configKey = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY); String configKey = (String) CacheUtils.get(CacheNames.SYS_OSS_CONFIG, OssConstant.OSS_CONFIG_KEY);
if (StringUtils.isEmpty(configKey)) { if (StringUtils.isEmpty(configKey)) {
throw new OssException("文件存储服务类型无法找到!"); throw new OssException("文件存储服务类型无法找到!");
} }
@ -62,7 +64,7 @@ public class OssFactory {
} }
private static void refresh(String configKey) { private static void refresh(String configKey) {
Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + configKey); Object json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class); OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class);
if (properties == null) { if (properties == null) {
throw new OssException("系统异常, '" + configKey + "'配置信息不存在!"); throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");

View File

@ -53,7 +53,7 @@ public interface ISysConfigService {
* @param config 参数配置信息 * @param config 参数配置信息
* @return 结果 * @return 结果
*/ */
int insertConfig(SysConfig config); String insertConfig(SysConfig config);
/** /**
* 修改参数配置 * 修改参数配置
@ -61,7 +61,7 @@ public interface ISysConfigService {
* @param config 参数配置信息 * @param config 参数配置信息
* @return 结果 * @return 结果
*/ */
int updateConfig(SysConfig config); String updateConfig(SysConfig config);
/** /**
* 批量删除参数信息 * 批量删除参数信息
@ -93,6 +93,4 @@ public interface ISysConfigService {
*/ */
String checkConfigKeyUnique(SysConfig config); String checkConfigKeyUnique(SysConfig config);
SysConfig getOne(SysConfig config);
} }

View File

@ -54,7 +54,7 @@ public interface ISysDictDataService {
* @param dictData 字典数据信息 * @param dictData 字典数据信息
* @return 结果 * @return 结果
*/ */
int insertDictData(SysDictData dictData); List<SysDictData> insertDictData(SysDictData dictData);
/** /**
* 修改保存字典数据信息 * 修改保存字典数据信息
@ -62,5 +62,5 @@ public interface ISysDictDataService {
* @param dictData 字典数据信息 * @param dictData 字典数据信息
* @return 结果 * @return 结果
*/ */
int updateDictData(SysDictData dictData); List<SysDictData> updateDictData(SysDictData dictData);
} }

View File

@ -84,7 +84,7 @@ public interface ISysDictTypeService {
* @param dictType 字典类型信息 * @param dictType 字典类型信息
* @return 结果 * @return 结果
*/ */
int insertDictType(SysDictType dictType); List<SysDictData> insertDictType(SysDictType dictType);
/** /**
* 修改保存字典类型信息 * 修改保存字典类型信息
@ -92,7 +92,7 @@ public interface ISysDictTypeService {
* @param dictType 字典类型信息 * @param dictType 字典类型信息
* @return 结果 * @return 结果
*/ */
int updateDictType(SysDictType dictType); List<SysDictData> updateDictType(SysDictType dictType);
/** /**
* 校验字典类型称是否唯一 * 校验字典类型称是否唯一

View File

@ -5,22 +5,23 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.CacheNames;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.service.ConfigService; import com.ruoyi.common.core.service.ConfigService;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.cache.CacheUtils;
import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysConfigService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -66,16 +67,12 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
* @param configKey 参数key * @param configKey 参数key
* @return 参数键值 * @return 参数键值
*/ */
@Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey")
@Override @Override
public String selectConfigByKey(String configKey) { public String selectConfigByKey(String configKey) {
String configValue = RedisUtils.getCacheObject(getCacheKey(configKey));
if (StringUtils.isNotEmpty(configValue)) {
return configValue;
}
SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>() SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
.eq(SysConfig::getConfigKey, configKey)); .eq(SysConfig::getConfigKey, configKey));
if (ObjectUtil.isNotNull(retConfig)) { if (ObjectUtil.isNotNull(retConfig)) {
RedisUtils.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
return retConfig.getConfigValue(); return retConfig.getConfigValue();
} }
return StringUtils.EMPTY; return StringUtils.EMPTY;
@ -119,13 +116,14 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
* @param config 参数配置信息 * @param config 参数配置信息
* @return 结果 * @return 结果
*/ */
@CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
@Override @Override
public int insertConfig(SysConfig config) { public String insertConfig(SysConfig config) {
int row = baseMapper.insert(config); int row = baseMapper.insert(config);
if (row > 0) { if (row > 0) {
RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); return config.getConfigValue();
} }
return row; throw new ServiceException("操作失败");
} }
/** /**
@ -134,8 +132,9 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
* @param config 参数配置信息 * @param config 参数配置信息
* @return 结果 * @return 结果
*/ */
@CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
@Override @Override
public int updateConfig(SysConfig config) { public String updateConfig(SysConfig config) {
int row = 0; int row = 0;
if (config.getConfigId() != null) { if (config.getConfigId() != null) {
row = baseMapper.updateById(config); row = baseMapper.updateById(config);
@ -144,9 +143,9 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
.eq(SysConfig::getConfigKey, config.getConfigKey())); .eq(SysConfig::getConfigKey, config.getConfigKey()));
} }
if (row > 0) { if (row > 0) {
RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); return config.getConfigValue();
} }
return row; throw new ServiceException("操作失败");
} }
/** /**
@ -161,7 +160,7 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
if (StringUtils.equals(UserConstants.YES, config.getConfigType())) { if (StringUtils.equals(UserConstants.YES, config.getConfigType())) {
throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
} }
RedisUtils.deleteObject(getCacheKey(config.getConfigKey())); CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey());
} }
baseMapper.deleteBatchIds(Arrays.asList(configIds)); baseMapper.deleteBatchIds(Arrays.asList(configIds));
} }
@ -172,9 +171,8 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
@Override @Override
public void loadingConfigCache() { public void loadingConfigCache() {
List<SysConfig> configsList = selectConfigList(new SysConfig()); List<SysConfig> configsList = selectConfigList(new SysConfig());
for (SysConfig config : configsList) { configsList.forEach(config ->
RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); CacheUtils.put(CacheNames.SYS_CONFIG, config.getConfigKey(), config.getConfigValue()));
}
} }
/** /**
@ -182,8 +180,7 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
*/ */
@Override @Override
public void clearConfigCache() { public void clearConfigCache() {
Collection<String> keys = RedisUtils.keys(CacheConstants.SYS_CONFIG_KEY + "*"); CacheUtils.clear(CacheNames.SYS_CONFIG);
RedisUtils.deleteObject(keys);
} }
/** /**
@ -211,11 +208,6 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
return UserConstants.UNIQUE; return UserConstants.UNIQUE;
} }
@Override
public SysConfig getOne(SysConfig config) {
return baseMapper.selectOne(new LambdaQueryWrapper<>(config));
}
/** /**
* 根据参数 key 获取参数值 * 根据参数 key 获取参数值
* *
@ -227,13 +219,4 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
return selectConfigByKey(configKey); return selectConfigByKey(configKey);
} }
/**
* 设置cache key
*
* @param configKey 参数键
* @return 缓存键key
*/
private String getCacheKey(String configKey) {
return CacheConstants.SYS_CONFIG_KEY + configKey;
}
} }

View File

@ -2,15 +2,17 @@ package com.ruoyi.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.CacheNames;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.cache.CacheUtils;
import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictDataService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -89,8 +91,7 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
for (Long dictCode : dictCodes) { for (Long dictCode : dictCodes) {
SysDictData data = selectDictDataById(dictCode); SysDictData data = selectDictDataById(dictCode);
baseMapper.deleteById(dictCode); baseMapper.deleteById(dictCode);
List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType()); CacheUtils.evict(CacheNames.SYS_DICT, data.getDictType());
RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas);
} }
} }
@ -100,14 +101,14 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
* @param data 字典数据信息 * @param data 字典数据信息
* @return 结果 * @return 结果
*/ */
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType")
@Override @Override
public int insertDictData(SysDictData data) { public List<SysDictData> insertDictData(SysDictData data) {
int row = baseMapper.insert(data); int row = baseMapper.insert(data);
if (row > 0) { if (row > 0) {
List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType()); return baseMapper.selectDictDataByType(data.getDictType());
RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas);
} }
return row; throw new ServiceException("操作失败");
} }
/** /**
@ -116,23 +117,14 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
* @param data 字典数据信息 * @param data 字典数据信息
* @return 结果 * @return 结果
*/ */
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType")
@Override @Override
public int updateDictData(SysDictData data) { public List<SysDictData> updateDictData(SysDictData data) {
int row = baseMapper.updateById(data); int row = baseMapper.updateById(data);
if (row > 0) { if (row > 0) {
List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType()); return baseMapper.selectDictDataByType(data.getDictType());
RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas);
} }
return row; throw new ServiceException("操作失败");
} }
/**
* 设置cache key
*
* @param configKey 参数键
* @return 缓存键key
*/
String getCacheKey(String configKey) {
return CacheConstants.SYS_DICT_KEY + configKey;
}
} }

View File

@ -5,7 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.CacheNames;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.domain.entity.SysDictData;
@ -15,11 +15,13 @@ import com.ruoyi.common.core.service.DictService;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StreamUtils; import com.ruoyi.common.utils.StreamUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.cache.CacheUtils;
import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.mapper.SysDictTypeMapper; import com.ruoyi.system.mapper.SysDictTypeMapper;
import com.ruoyi.system.service.ISysDictTypeService; import com.ruoyi.system.service.ISysDictTypeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -83,17 +85,13 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
* @param dictType 字典类型 * @param dictType 字典类型
* @return 字典数据集合信息 * @return 字典数据集合信息
*/ */
@Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType")
@Override @Override
public List<SysDictData> selectDictDataByType(String dictType) { public List<SysDictData> selectDictDataByType(String dictType) {
List<SysDictData> dictDatas = RedisUtils.getCacheObject(getCacheKey(dictType)); List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType);
if (CollUtil.isNotEmpty(dictDatas)) { if (CollUtil.isNotEmpty(dictDatas)) {
return dictDatas; return dictDatas;
} }
dictDatas = dictDataMapper.selectDictDataByType(dictType);
if (CollUtil.isNotEmpty(dictDatas)) {
RedisUtils.setCacheObject(getCacheKey(dictType), dictDatas);
return dictDatas;
}
return null; return null;
} }
@ -132,7 +130,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
.eq(SysDictData::getDictType, dictType.getDictType()))) { .eq(SysDictData::getDictType, dictType.getDictType()))) {
throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
} }
RedisUtils.deleteObject(getCacheKey(dictType.getDictType())); CacheUtils.evict(CacheNames.SYS_DICT, dictType.getDictType());
} }
baseMapper.deleteBatchIds(Arrays.asList(dictIds)); baseMapper.deleteBatchIds(Arrays.asList(dictIds));
} }
@ -146,9 +144,8 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getStatus, UserConstants.DICT_NORMAL)); new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getStatus, UserConstants.DICT_NORMAL));
Map<String, List<SysDictData>> dictDataMap = StreamUtils.groupByKey(dictDataList, SysDictData::getDictType); Map<String, List<SysDictData>> dictDataMap = StreamUtils.groupByKey(dictDataList, SysDictData::getDictType);
dictDataMap.forEach((k,v) -> { dictDataMap.forEach((k,v) -> {
String dictKey = getCacheKey(k);
List<SysDictData> dictList = StreamUtils.sorted(v, Comparator.comparing(SysDictData::getDictSort)); List<SysDictData> dictList = StreamUtils.sorted(v, Comparator.comparing(SysDictData::getDictSort));
RedisUtils.setCacheObject(dictKey, dictList); CacheUtils.put(CacheNames.SYS_DICT, k, dictList);
}); });
} }
@ -157,8 +154,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
*/ */
@Override @Override
public void clearDictCache() { public void clearDictCache() {
Collection<String> keys = RedisUtils.keys(CacheConstants.SYS_DICT_KEY + "*"); CacheUtils.clear(CacheNames.SYS_DICT);
RedisUtils.deleteObject(keys);
} }
/** /**
@ -176,13 +172,14 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
* @param dict 字典类型信息 * @param dict 字典类型信息
* @return 结果 * @return 结果
*/ */
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType")
@Override @Override
public int insertDictType(SysDictType dict) { public List<SysDictData> insertDictType(SysDictType dict) {
int row = baseMapper.insert(dict); int row = baseMapper.insert(dict);
if (row > 0) { if (row > 0) {
RedisUtils.setCacheObject(getCacheKey(dict.getDictType()), null); return new ArrayList<>();
} }
return row; throw new ServiceException("操作失败");
} }
/** /**
@ -191,19 +188,20 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
* @param dict 字典类型信息 * @param dict 字典类型信息
* @return 结果 * @return 结果
*/ */
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType")
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int updateDictType(SysDictType dict) { public List<SysDictData> updateDictType(SysDictType dict) {
SysDictType oldDict = baseMapper.selectById(dict.getDictId()); SysDictType oldDict = baseMapper.selectById(dict.getDictId());
dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>() dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>()
.set(SysDictData::getDictType, dict.getDictType()) .set(SysDictData::getDictType, dict.getDictType())
.eq(SysDictData::getDictType, oldDict.getDictType())); .eq(SysDictData::getDictType, oldDict.getDictType()));
int row = baseMapper.updateById(dict); int row = baseMapper.updateById(dict);
if (row > 0) { if (row > 0) {
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); CacheUtils.evict(CacheNames.SYS_DICT, oldDict.getDictType());
RedisUtils.setCacheObject(getCacheKey(dict.getDictType()), dictDatas); return dictDataMapper.selectDictDataByType(dict.getDictType());
} }
return row; throw new ServiceException("操作失败");
} }
/** /**
@ -287,13 +285,4 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService
return StringUtils.stripEnd(propertyString.toString(), separator); return StringUtils.stripEnd(propertyString.toString(), separator);
} }
/**
* 设置cache key
*
* @param configKey 参数键
* @return 缓存键key
*/
String getCacheKey(String configKey) {
return CacheConstants.SYS_DICT_KEY + configKey;
}
} }

View File

@ -7,12 +7,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.constant.CacheNames;
import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.cache.CacheUtils;
import com.ruoyi.common.utils.redis.RedisUtils; import com.ruoyi.common.utils.redis.RedisUtils;
import com.ruoyi.oss.constant.OssConstant; import com.ruoyi.oss.constant.OssConstant;
import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.oss.factory.OssFactory;
@ -53,7 +55,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
for (SysOssConfig config : list) { for (SysOssConfig config : list) {
String configKey = config.getConfigKey(); String configKey = config.getConfigKey();
if ("0".equals(config.getStatus())) { if ("0".equals(config.getStatus())) {
RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, configKey); CacheUtils.put(CacheNames.SYS_OSS_CONFIG, OssConstant.OSS_CONFIG_KEY, configKey);
} }
setConfigCache(true, config); setConfigCache(true, config);
} }
@ -126,9 +128,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
} }
boolean flag = baseMapper.deleteBatchIds(ids) > 0; boolean flag = baseMapper.deleteBatchIds(ids) > 0;
if (flag) { if (flag) {
list.forEach(sysOssConfig -> { list.forEach(sysOssConfig ->
RedisUtils.deleteObject(getCacheKey(sysOssConfig.getConfigKey())); CacheUtils.evict(CacheNames.SYS_OSS_CONFIG, sysOssConfig.getConfigKey()));
});
} }
return flag; return flag;
} }
@ -158,21 +159,11 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
.set(SysOssConfig::getStatus, "1")); .set(SysOssConfig::getStatus, "1"));
row += baseMapper.updateById(sysOssConfig); row += baseMapper.updateById(sysOssConfig);
if (row > 0) { if (row > 0) {
RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey()); CacheUtils.put(CacheNames.SYS_OSS_CONFIG, OssConstant.OSS_CONFIG_KEY, sysOssConfig.getConfigKey());
} }
return row; return row;
} }
/**
* 设置cache key
*
* @param configKey 参数键
* @return 缓存键key
*/
private String getCacheKey(String configKey) {
return OssConstant.SYS_OSS_KEY + configKey;
}
/** /**
* 如果操作成功 则更新缓存 * 如果操作成功 则更新缓存
* *
@ -182,9 +173,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
*/ */
private boolean setConfigCache(boolean flag, SysOssConfig config) { private boolean setConfigCache(boolean flag, SysOssConfig config) {
if (flag) { if (flag) {
RedisUtils.setCacheObject( CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
getCacheKey(config.getConfigKey()),
JsonUtils.toJsonString(config));
RedisUtils.publish(OssConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> { RedisUtils.publish(OssConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> {
log.info("发布刷新OSS配置 => " + msg); log.info("发布刷新OSS配置 => " + msg);
}); });