|
@ -27,10 +27,12 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.io.*;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@ -50,18 +52,16 @@ public class RedisScheduledController {
|
|
|
private String rdbFilePath;
|
|
|
@Value("${ehr-redis.cache.memory.outFilePath}")
|
|
|
private String outFilePath;
|
|
|
// @Value("${ehr-redis.server.host}")
|
|
|
// private String redisServerHost;
|
|
|
// @Value("${ehr-redis.server.username}")
|
|
|
// private String redisServerUsername;
|
|
|
// @Value("${ehr-redis.server.password}")
|
|
|
// private String redisServerPwd;
|
|
|
// @Value("${ehr-redis.server.ssh-port}")
|
|
|
// private int redisServerSshPort;
|
|
|
private String redisServerHost = "";
|
|
|
private String redisServerUsername = "";
|
|
|
private String redisServerPwd = "";
|
|
|
private int redisServerSshPort = 22;
|
|
|
@Value("${ehr-redis.cache.memory.filename}")
|
|
|
private String filename;
|
|
|
@Value("${ehr-redis.server.host}")
|
|
|
private String redisServerHost;
|
|
|
@Value("${ehr-redis.server.username}")
|
|
|
private String redisServerUsername;
|
|
|
@Value("${ehr-redis.server.password}")
|
|
|
private String redisServerPwd;
|
|
|
@Value("${ehr-redis.server.ssh-port}")
|
|
|
private int redisServerSshPort;
|
|
|
|
|
|
@Autowired
|
|
|
private RedisCacheKeyMemoryService redisCacheKeyMemoryService;
|
|
@ -84,20 +84,21 @@ public class RedisScheduledController {
|
|
|
|
|
|
|
|
|
@RequestMapping(value = "/redis/cache/statistics/exportAndImportRedisMemoryData", method = RequestMethod.GET)
|
|
|
@ResponseBody
|
|
|
@ApiOperation("导出 redis 内存分析报告,并导入到数据库")
|
|
|
public void exportAndImportRedisMemoryData() {
|
|
|
public String exportAndImportRedisMemoryData() {
|
|
|
long start = System.currentTimeMillis();
|
|
|
try {
|
|
|
// 导出内存分析报告CSV文件(得到的内存值是近似值,比实际略小)
|
|
|
// 生产环境服务器不允许代码直接通过SSH访问服务器,故暂时注释,另寻方法。
|
|
|
exportRedisMemoryReport();
|
|
|
// exportRedisMemoryReport();
|
|
|
|
|
|
long export = System.currentTimeMillis();
|
|
|
logger.info("成功导出Redis内存分析报告,耗时:" + (export - start) + " 毫秒");
|
|
|
|
|
|
// 导入CSV格式的内存分析数据
|
|
|
FlatFileItemReader<RedisCacheKeyMemory> itemReader = new FlatFileItemReader<>();
|
|
|
itemReader.setResource(new FileSystemResource(outFilePath));
|
|
|
itemReader.setResource(new FileSystemResource(outFilePath+filename));
|
|
|
itemReader.setLinesToSkip(1);
|
|
|
DefaultLineMapper<RedisCacheKeyMemory> lineMapper = new DefaultLineMapper<>();
|
|
|
lineMapper.setLineTokenizer(new DelimitedLineTokenizer());
|
|
@ -114,6 +115,8 @@ public class RedisScheduledController {
|
|
|
int i = 0;
|
|
|
while ((redisCacheKeyMemory = itemReader.read()) != null) {
|
|
|
redisCacheKeyMemory.setId(UuidUtil.randomUUID());
|
|
|
redisCacheKeyMemory.setModifyDate(new Date());
|
|
|
redisCacheKeyMemory.setCreateDate(new Date());
|
|
|
redisCacheKeyMemoryList.add(redisCacheKeyMemory);
|
|
|
if (redisCacheKeyMemoryList.size() == 1000) {
|
|
|
redisCacheKeyMemoryService.save(redisCacheKeyMemoryList);
|
|
@ -131,6 +134,7 @@ public class RedisScheduledController {
|
|
|
e.printStackTrace();
|
|
|
logger.error("发生异常:" + e.getMessage());
|
|
|
}
|
|
|
return "导出成功";
|
|
|
}
|
|
|
|
|
|
/**
|
|
@ -160,7 +164,11 @@ public class RedisScheduledController {
|
|
|
InputStream in = channel.getInputStream();
|
|
|
channel.connect();
|
|
|
|
|
|
File outFile = new File(outFilePath);
|
|
|
File file = new File(outFilePath);
|
|
|
if(!file.exists()){
|
|
|
file.mkdirs();
|
|
|
}
|
|
|
File outFile = new File(file,filename);
|
|
|
if (!outFile.exists()){
|
|
|
outFile.createNewFile();
|
|
|
}
|
|
@ -179,6 +187,7 @@ public class RedisScheduledController {
|
|
|
channel.disconnect();
|
|
|
session.disconnect();
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
logger.error("生成Redis内存分析报告发生异常:" + e.getMessage());
|
|
|
throw new Exception();
|
|
|
} finally {
|