使用EasyExcel导出复杂报表

news2024/11/18 23:37:56

1.效果图

在这里插入图片描述

2.请引入EasyExcel相关依赖,自行百度

3.controller

@Api(tags = "下载中心接口")
@RestController
@RequestMapping("/basic/download")
public class CspDownloadCenter extends BaseController {
    @ApiOperation(value = "复杂的excel测试导出")
    @GetMapping("/excelExportTest")
    public void excelExportTest() throws IOException {
        excelExportService.excelExportTest();
    }

}

4.Service

public interface ICspExcelExportService {
void excelExportTest() throws IOException;
}

5.Service实现层

public void excelExportTest() throws IOException {

    List<List<String>> headList = getHeadList();
    List<List<String>> dataList = getDateList();

// 这个自己更改
String downloadPath = “D:\sunsiny\2023\work_day\20231010\” + “复杂的excel导出案例” + DateUtils.dateTimeNow() + “.xlsx”;

// 这个自己更改
String downloadBusinessFileName = “D:\sunsiny\2023\work_day\20231010\” + “复杂的excel导出案例” + DateUtils.dateTimeNow() + “1” + “.xlsx”;

    EasyExcel.write(downloadPath)
            .head(roateHeadFields(headList))
            .sheet("sheet1")
            .registerWriteHandler(registerWriteHandler())
            .doWrite(dataList);


    // 加载已导出的文件
    File exportedFile = new File(downloadPath);
    Workbook workbook = WorkbookFactory.create(exportedFile);
    Sheet sheet = workbook.getSheet("sheet1");
    // 移除已有的合并区域

// sheet.removeMergedRegion(0);

    // 创建样式对象
    CellStyle cellStyle = workbook.createCellStyle();
    // 设置边框

// cellStyle.setBorderTop(BorderStyle.THIN);
// cellStyle.setBorderBottom(BorderStyle.THIN);
// cellStyle.setBorderLeft(BorderStyle.THIN);
// cellStyle.setBorderRight(BorderStyle.THIN);
// 设置水平对齐方式
cellStyle.setAlignment(HorizontalAlignment.CENTER); // 居中对齐
// 设置合并单元格区域1 月度客诉率
CellRangeAddress mergedRegionRemark = new CellRangeAddress(3, 3, 1, 3);
sheet.addMergedRegion(mergedRegionRemark);
Cell remarkCell = sheet.getRow(3).getCell(0);
remarkCell.setCellStyle(cellStyle);

    // 设置合并单元格区域2   月度工单总量
    CellRangeAddress mergedRegionRemark2 = new CellRangeAddress(4, 4, 1, 3);
    sheet.addMergedRegion(mergedRegionRemark2);
    Cell remarkCell2 = sheet.getRow(4).getCell(0);
    remarkCell2.setCellStyle(cellStyle);

    // 设置合并单元格区域3   客诉类型序号
    CellRangeAddress mergedRegionRemark3 = new CellRangeAddress(5, 7, 0, 0);
    sheet.addMergedRegion(mergedRegionRemark3);
    Cell remarkCell3 = sheet.getRow(5).getCell(0);
    remarkCell3.setCellStyle(cellStyle);

    // 设置合并单元格区域4   客诉类型
    CellRangeAddress mergedRegionRemark4 = new CellRangeAddress(5, 7, 1, 1);
    sheet.addMergedRegion(mergedRegionRemark4);
    Cell remarkCell4 = sheet.getRow(5).getCell(0);
    remarkCell4.setCellStyle(cellStyle);

    // 设置合并单元格区域5 客户原因
    CellRangeAddress mergedRegionRemark5 = new CellRangeAddress(5, 5, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark5);
    Cell remarkCell5 = sheet.getRow(5).getCell(0);
    remarkCell5.setCellStyle(cellStyle);

    // 设置合并单元格区域6 绝配原因
    CellRangeAddress mergedRegionRemark6 = new CellRangeAddress(6, 7, 2, 2);
    sheet.addMergedRegion(mergedRegionRemark6);
    Cell remarkCell6 = sheet.getRow(6).getCell(0);
    remarkCell6.setCellStyle(cellStyle);

    // 设置合并单元格区域7   工单类型
    CellRangeAddress mergedRegionRemark7 = new CellRangeAddress(8, 9, 1, 1);
    sheet.addMergedRegion(mergedRegionRemark7);
    Cell remarkCell7 = sheet.getRow(8).getCell(0);
    remarkCell7.setCellStyle(cellStyle);

    // 设置合并单元格区域7   工单类型-序号
    CellRangeAddress mergedRegionRemark7Number = new CellRangeAddress(8, 9, 0, 0);
    sheet.addMergedRegion(mergedRegionRemark7Number);
    Cell remarkCell7Number = sheet.getRow(8).getCell(0);
    remarkCell7Number.setCellStyle(cellStyle);

    // 设置合并单元格区域8   工单类型-普通工单
    CellRangeAddress mergedRegionRemark8 = new CellRangeAddress(8, 8, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark8);
    Cell remarkCell8 = sheet.getRow(8).getCell(0);
    remarkCell8.setCellStyle(cellStyle);

    // 设置合并单元格区域9   工单类型-理赔工单
    CellRangeAddress mergedRegionRemark9 = new CellRangeAddress(9, 9, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark9);
    Cell remarkCell9 = sheet.getRow(9).getCell(0);
    remarkCell9.setCellStyle(cellStyle);

    // 设置合并单元格区域10   盘点差异
    CellRangeAddress mergedRegionRemark10 = new CellRangeAddress(10, 12, 1, 1);
    sheet.addMergedRegion(mergedRegionRemark10);
    Cell remarkCell10 = sheet.getRow(10).getCell(0);
    remarkCell10.setCellStyle(cellStyle);

    // 设置合并单元格区域10   盘点差异-序号
    CellRangeAddress mergedRegionRemark10Number = new CellRangeAddress(10, 12, 0, 0);
    sheet.addMergedRegion(mergedRegionRemark10Number);
    Cell remarkCell10Number = sheet.getRow(10).getCell(0);
    remarkCell10Number.setCellStyle(cellStyle);


    // 设置合并单元格区域11   盘点差异-差异SKU数量
    CellRangeAddress mergedRegionRemark11 = new CellRangeAddress(10, 10, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark11);
    Cell remarkCell11 = sheet.getRow(10).getCell(0);
    remarkCell11.setCellStyle(cellStyle);

    // 设置合并单元格区域12   盘点差异-库存准确率
    CellRangeAddress mergedRegionRemark12 = new CellRangeAddress(11, 11, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark12);
    Cell remarkCell12 = sheet.getRow(11).getCell(0);
    remarkCell12.setCellStyle(cellStyle);

    // 设置合并单元格区域13   盘点差异-库存准确率
    CellRangeAddress mergedRegionRemark13 = new CellRangeAddress(12, 12, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark13);
    Cell remarkCell13 = sheet.getRow(12).getCell(0);
    remarkCell13.setCellStyle(cellStyle);

    // 设置合并单元格区域14   理赔承担
    CellRangeAddress mergedRegionRemark14 = new CellRangeAddress(13, 17, 1, 1);
    sheet.addMergedRegion(mergedRegionRemark14);
    Cell remarkCell14 = sheet.getRow(13).getCell(0);
    remarkCell14.setCellStyle(cellStyle);

    // 设置合并单元格区域14   理赔承担-序号
    CellRangeAddress mergedRegionRemark14Number = new CellRangeAddress(13, 17, 0, 0);
    sheet.addMergedRegion(mergedRegionRemark14Number);
    Cell remarkCell14Number = sheet.getRow(13).getCell(0);
    remarkCell14Number.setCellStyle(cellStyle);

    // 设置合并单元格区域15   理赔承担-客户承担
    CellRangeAddress mergedRegionRemark15 = new CellRangeAddress(13, 13, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark15);
    Cell remarkCell15 = sheet.getRow(13).getCell(0);
    remarkCell15.setCellStyle(cellStyle);

    // 设置合并单元格区域16   理赔承担-下游承担
    CellRangeAddress mergedRegionRemark16 = new CellRangeAddress(14, 15, 2, 2);
    sheet.addMergedRegion(mergedRegionRemark16);
    Cell remarkCell16 = sheet.getRow(14).getCell(0);
    remarkCell16.setCellStyle(cellStyle);

    // 设置合并单元格区域17   理赔承担-绝配承担
    CellRangeAddress mergedRegionRemark17 = new CellRangeAddress(16, 16, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark17);
    Cell remarkCell17 = sheet.getRow(16).getCell(0);
    remarkCell17.setCellStyle(cellStyle);

    // 设置合并单元格区域18   理赔承担-月度理赔总额
    CellRangeAddress mergedRegionRemark18 = new CellRangeAddress(17, 17, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark18);
    Cell remarkCell18 = sheet.getRow(17).getCell(0);
    remarkCell18.setCellStyle(cellStyle);

    // 设置合并单元格区域19   原因归类
    CellRangeAddress mergedRegionRemark19 = new CellRangeAddress(18, 19, 1, 1);
    sheet.addMergedRegion(mergedRegionRemark19);
    Cell remarkCell19 = sheet.getRow(18).getCell(0);
    remarkCell19.setCellStyle(cellStyle);

    // 设置合并单元格区域19   原因归类-序号
    CellRangeAddress mergedRegionRemark19Number = new CellRangeAddress(18, 19, 0, 0);
    sheet.addMergedRegion(mergedRegionRemark19Number);
    Cell remarkCell19Number = sheet.getRow(18).getCell(0);
    remarkCell19Number.setCellStyle(cellStyle);

    // 设置合并单元格区域20   原因归类-月度工单量产生比例最高
    CellRangeAddress mergedRegionRemark20 = new CellRangeAddress(18, 18, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark20);
    Cell remarkCell20 = sheet.getRow(18).getCell(0);
    remarkCell20.setCellStyle(cellStyle);

    // 设置合并单元格区域21   原因归类-单笔理赔金额最高
    CellRangeAddress mergedRegionRemark21 = new CellRangeAddress(19, 19, 2, 3);
    sheet.addMergedRegion(mergedRegionRemark21);
    Cell remarkCell21 = sheet.getRow(19).getCell(0);
    remarkCell21.setCellStyle(cellStyle);

    // 自定义列宽
    int maxLength = 50;
    if (!CollectionUtils.isEmpty(dataList)) {
        for (int i = 0; i < dataList.get(0).size(); i++) {
            sheet.setColumnWidth(i, (maxLength) * 125);
        }
    }


    // 保存文件
    try (FileOutputStream fos = new FileOutputStream(downloadBusinessFileName)) {
        workbook.write(fos);
        workbook.close();
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}

6.表格样式设置

/**
     * 表格样式设置
     */
    private HorizontalCellStyleStrategy registerWriteHandler() {
        // 头的策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 头背景设置
        headWriteCellStyle.setFillForegroundColor(IndexedColors.AQUA.getIndex());
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 10);
        headWriteCellStyle.setWriteFont(headWriteFont);
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        WriteFont font = new WriteFont();
//        font.setFontName("微软雅黑");
        font.setColor(IndexedColors.WHITE.getIndex()); // 设置文本颜色为白色
        headWriteCellStyle.setWriteFont(font);

        // 内容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
//        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        WriteFont contentWriteFont = new WriteFont();
        // 字体大小
        contentWriteFont.setFontHeightInPoints((short) 10);
//        contentWriteFont.setFontName("微软雅黑");
        contentWriteCellStyle.setWriteFont(contentWriteFont);
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        contentWriteCellStyle.setWrapped(true); // 设置自动换行
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // 设置边框
//        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
//        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
//        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
//        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);

        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
        return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
    }
private List<List<String>> roateHeadFields(List<List<String>> headFields) {
        List<List<String>> result = new ArrayList<>();
        for (List<String> row : headFields) {
            for (int j = 0; j < row.size(); j++) {
                if (result.size() > j) {
                    // 往对应第j个List<String> 添加添加值
                    result.get(j).add(row.get(j));
                } else {
                    // 分割成单个List<String>
                    result.add(new ArrayList<>(Collections.singletonList(row.get(j))));
                }
            }
        }
        return result;
    }

7.表头

private List<List<String>> getHeadList() {
        List<List<String>> headList = new ArrayList<>();
        List<String> titleOne = Lists.newArrayList("XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据", "XX项目管理基础数据");
        headList.add(makeUpTitle(titleOne));
        List<String> titleTwo = Lists.newArrayList("序号", "分析维度", "分析维度", "分析维度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度", "2023年时间跨度");
        headList.add(makeUpTitle(titleTwo));
        List<String> titleThree = Lists.newArrayList("序号", "一级", "二级", "三级", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月");
        headList.add(makeUpTitle(titleThree));
        return headList;
    }
private List<String> makeUpTitle(List<String> titleList) {
        List<String> makeUpList = new ArrayList<>();
        String temp = "";
        for (String e : org.apache.commons.collections4.ListUtils.emptyIfNull(titleList)) {
            if (StringUtils.isNotEmpty(e)) {
                temp = e;
            }
            makeUpList.add(temp);
        }
        return makeUpList;
    }

8.行数据

private List<List<String>> getDateList() {
        List<List<String>> dataList = new ArrayList<>();
        for (int i = 0; i < 17; i++) {
            dataList.add(buildData(i));
        }
        return dataList;
    }
public List<String> buildData(int i) {
        List<String> list = new ArrayList<>();
        switch (i) {
            case 0:
                list.add(String.valueOf(i + 1));
                list.add("月度客诉率-%");
                list.add("月度客诉率-%");
                list.add("月度客诉率-%");
                list.add("3.01");
                return list;
            case 1:
                list.add(String.valueOf(i + 1));
                list.add("月度工单总量");
                list.add("月度工单总量");
                list.add("月度工单总量");
                list.add("10");
                return list;
            case 2:
                list.add(String.valueOf(i + 1));
                list.add("客诉类型");
                list.add("客户原因");
                list.add("客户原因");
                list.add("2");
                return list;
            case 3:
                list.add(String.valueOf(i));
                list.add("客诉类型");
                list.add("绝配原因");
                list.add("仓");
                list.add("5");
                return list;
            case 4:
                list.add(String.valueOf(i));
                list.add("客诉类型");
                list.add("绝配原因");
                list.add("配");
                list.add("1");
                return list;
            case 5:
                list.add(String.valueOf(i - 1));
                list.add("工单类型");
                list.add("普通工单");
                list.add("普通工单");
                list.add("8");
                return list;
            case 6:
                list.add(String.valueOf(i));
                list.add("工单类型");
                list.add("理赔工单");
                list.add("理赔工单");
                list.add("2");
                return list;
            case 7:
                list.add(String.valueOf(i - 2));
                list.add("盘点差异");
                list.add("差异SKU数量");
                list.add("差异SKU数量");
                list.add("13");
                return list;
            case 8:
                list.add(String.valueOf(i));
                list.add("盘点差异");
                list.add("库存准确率");
                list.add("库存准确率");
                list.add("");
                return list;
            case 9:
                list.add(String.valueOf(i));
                list.add("盘点差异");
                list.add("月度理赔金额");
                list.add("月度理赔金额");
                list.add("1500.00");
                return list;
            case 10:
                list.add(String.valueOf(i - 4));
                list.add("理赔承担");
                list.add("客户承担");
                list.add("客户承担");
                list.add("1500.00");
                return list;
            case 11:
                list.add(String.valueOf(i));
                list.add("理赔承担");
                list.add("下游承担");
                list.add("仓");
                list.add("1500.00");
                return list;
            case 12:
                list.add(String.valueOf(i));
                list.add("理赔承担");
                list.add("下游承担");
                list.add("配");
                list.add("1500.00");
                return list;
            case 13:
                list.add(String.valueOf(i));
                list.add("理赔承担");
                list.add("绝配承担");
                list.add("绝配承担");
                list.add("1500.00");
                return list;
            case 14:
                list.add(String.valueOf(i));
                list.add("理赔承担");
                list.add("月度理赔总额");
                list.add("月度理赔总额");
                list.add("1500.00");
                return list;
            case 15:
                list.add(String.valueOf(i - 8));
                list.add("原因归类");
                list.add("月度工单量产生比例最高");
                list.add("月度工单量产生比例最高");
                list.add("少货(75%)");
                return list;
            case 16:
                list.add(String.valueOf(i));
                list.add("原因归类");
                list.add("单笔理赔金额最高");
                list.add("单笔理赔金额最高");
                list.add("库存差异(30%)");
                return list;
            default:
                return null;
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lesson10---list

lesson18: 一、 1.list是一个XX链表&#xff08;0&#xff1a;19&#xff1a;26&#xff09; 2.链表里面&#xff0c;单独存储数据最适合的结构是XX&#xff08;0&#xff1a;19&#xff1a;53&#xff09; 3.list的任意位置插入删除的时间复杂度是O(N)吗&#xff1f;&…

每日leetcode_2441_对应负数同时存在的最大整数

Leetcode每日一题_2441_对应负数同时存在的最大整数 记录自己的成长&#xff0c;加油。 题目 解题 class Solution {public int findMaxK(int[] nums) {int k -1;Set<Integer> set new HashSet<Integer>();for (int x : nums) {set.add(x);}for (int x : nums) …

springboot整合websocket开箱即用

springboot-websocket整合项目开箱即用&#xff0c;ws服务端&#xff0c;包含了在线客户监听&#xff0c;发送指定客户端数据&#xff0c;发送所有客户端数据。还可以根据指定转发给某个客户端。 WebSocketConfig配置缓存大小设置&#xff0c;设置异步发送操作的超时时间&#…

HTML5的新增表单元素

HTML5 有以下新的表单元素: <datalist> <keygen> <output> datalist datalist 元素规定输入域的选项列表。 datalist属性规定 form 或 input 域应该拥有自动完成功能。当用户在自动完成域中开始输入时&#xff0c;浏览器应该在该域中显示填写的选项&…

OSPF的原理与配置

第1章 OSPF[1] 本章阐述了OSPF协议的特征、术语&#xff0c;OSPF的路由器类型、网络类型、区域类型、LSA类型&#xff0c;OSPF报文的具体内容及作用&#xff0c;描述了OSPF的邻居关系&#xff0c;通过实例让读者掌握OSPF在各种场景中的配置。 本章包含以下内容&#xff1a; …

docker创建nginx容器

前言&#xff1a;当直接run运行nginx容器时&#xff0c;如果命令带有-v 映射出配置文件目录&#xff0c;则会报错&#xff0c;提示无法初始化&#xff0c;原因是没有配置文件&#xff0c;docker会同步主机文件到容器内&#xff0c;而主机文件又是空白的&#xff0c;所以无法启动…

选择工业交换机的外壳有什么要求?

在选择工业交换机时&#xff0c;我们通常更加注意工业交换机的温度范围、EMC电磁兼容性、安装方式和电源等方面&#xff0c;而对于工业交换机的外壳关注较少&#xff0c;除非客户有防水要求&#xff0c;那么&#xff0c;选择外壳有什么要求呢&#xff1f; 工业交换机的外壳采用…

华测监测预警系统 2.2 存在任意文件读取漏洞

华测监测预警系统 2.2 存在任意文件读取漏洞 一、 华测监测预警系统 2.2 简介二、漏洞描述三、影响版本四、fofa查询语句五、漏洞复现1、手动复现2、自动复现 六、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信…

mac 版hadoop3.2.4 解决 Unable to load native-hadoop library 缺失文件

mac 版hadoop3.2.4或其他版本 Unable to load native-hadoop library 缺失文件 Native 包报错缺失&#xff1a; 1. hadoop-3.2.4/lib/native里加*.dylib 2. hadoop-3.2.4/etc/hadoop/hadoop-env.sh 加或修改 export HADOOP_OPTS"-Djava.library.path/Users/lvan/Documen…

a16z公布AI产品流量排名,ChatGPT占据榜首

&#x1f989; AI新闻 &#x1f680; a16z公布AI产品流量排名&#xff0c;ChatGPT占据榜首 摘要&#xff1a;美国风投公司a16z公布了针对C端用户的AI产品流量排名榜单。根据SimilarWeb的网站流量数据&#xff0c;ChatGPT位居榜首&#xff0c;占总流量的60%。排名第二的是Char…

设计模式 - 结构型模式考点篇:装饰者模式(概念 | 案例实现 | 优缺点 | 使用场景)

目录 一、结构型模式 1.1、装饰者模式 1.1.1、概念 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、结构型模式 1.1、装饰者模式 1.1.1、概念 装饰者模式就是指在不改变现有对象结构的情况下&#xff0c;动态的给该对象增加一些职责&#xff08;增加额外功能&#…

IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

四足机器人强化学习控制第三篇 第一篇 Isaac Gym环境安装和四足机器人模型的训练 第二篇 docker中安装ROS 在宇树四足机器人运行 强化学习GenLoco算法 目录 四足机器人强化学习控制第三篇前言一、安装和配置二、训练1.训练2.恢复训练3.训练结果 三、sim to real1.部署模型注意…

重生奇迹MU天空之城玩转攻略

现在依然有众多玩家喜欢重生奇迹MU 游戏&#xff0c;游戏设计非常完善&#xff0c;后续推出了重生奇迹MU 版本&#xff0c;在设计方面更加炫酷&#xff0c;各种游戏玩法以及模式&#xff0c;让众多玩家感受到不错的游戏体验。 游戏由很多的地图组成&#xff0c;重生奇迹MU 大陆…

【Redis】List列表相关的命令

目录 命令LPUSHLPUSHXLRANGERPUSHRPUSHXLPOPRPOPLINDEXLINSERTLLENblpop和brpop 命令 LPUSH 将⼀个或者多个元素从左侧放⼊&#xff08;头插&#xff09;到list中。 LPUSH key element [element ...]LPUSHX 在key存在时&#xff0c;将⼀个或者多个元素从左侧放⼊&#xff08…

【好文推荐】openGauss索引推荐功能测试

一、单索引推荐 单索引推荐功能&#xff0c;目前支持select查询&#xff0c;看官方介绍类似oracle中的sql_tunning_adviser,不过只是推荐创建索引。根据sql优化原理&#xff0c;猜测应该时根据选择来推荐索引。 1、查看sqlPanWeiDB# create table t2 as select * from pg_tab…

家政预约服务APP小程序搭建,功能支持定制

家政预约服务APP小程序搭建&#xff0c;功能支持定制&#xff0c;后期升级无忧&#xff0e;团队自主研发家政APP系统&#xff0c;正版源码&#xff0c;售后技术保障&#xff01; 家政系统客户端 搭建专属私城流量平台&#xff0c;让您插上互联网的翅膀。找月嫂&#xff0c;育婴…

Docker镜像容器简单案例

我们安装完Docker之后就可以练习了. 镜像 案例1-拉取、查看镜像 1&#xff09;首先去镜像仓库搜索nginx镜像&#xff0c;比如 : Docker Hub Container Image Library | App Containerization 搜索我们想要拉取的镜像 , 例如: nginx 复制命令&#xff1a; docker pull nginx …

性能测试之稳定性测试和并发压力测试的TPS计算

1、稳定性测试TPS计算 ①普通计算公式&#xff1a;TPS总请求数 / 总时间按照需求得到基础数据&#xff0c;在去年第20周&#xff0c;某平台有5万的浏览量那么总请求数我们可以估算为5万&#xff08;1次浏览都至少对应1个请求&#xff09;总请求数 50000请求数总时间&#xff1…

Spring Task简单说明

1.导入坐标 说明&#xff1a;自带有spring-context。 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun.sdk.oss}</version> </dependency> 2. 启动类添加注解 pac…

ubuntu下查看realsense摄像头查看支持的分辨率和频率

引言&#xff1a; 在实际应用中&#xff0c;摄像头的频率如果过高&#xff0c;可能会造成系统图像处理的压力过大&#xff0c;因此需要选择合适的参数才能达到预期的效果。本文主要探讨设置realsense相关参数 1、打开终端&#xff0c;输入rs-enumerate-devices rs-enumerate-…