当前位置: 首页 > news >正文

高端网站制作流程健康管理公司网站建设

高端网站制作流程,健康管理公司网站建设,安卓版傻瓜式编程app软件,郑州网站推广外包地址一、需求背景 接手一个老项目#xff0c;在项目启动的时候#xff0c;需要将xxx省整个省的所有区域数据数据、以及系统字典配置逐条保存在Redis缓存里面#xff0c;这样查询的时候会更快; 区域数据字典数据一共大概20000多条,#xff0c;前同事直接使用 list.forEach…一、需求背景 接手一个老项目在项目启动的时候需要将xxx省整个省的所有区域数据数据、以及系统字典配置逐条保存在Redis缓存里面这样查询的时候会更快;       区域数据字典数据一共大概20000多条,前同事直接使用 list.forEach()逐条写入Redis,如下: import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; /*** author xxx* version 1.0* date 2022/7/21 15:29* Description: 项目启动成功后初始化区域数据到redis*/ Component Slf4j public class AreasInitialComponent implements ApplicationRunner {AutowiredprivateAreaMapper areaMapper;private static boolean isStart false;/*** 项目启动后初始化字典到缓存*/Overridepublic void run(ApplicationArguments args) throws Exception {if (isStart) {return;}try {log.info(Start*******************项目启动后初始化字典到缓存*******************);QueryWrapperArea wrapper new QueryWrapper();wrapper.eq(del, 0);ListArea areas areaMapper.selectList(wrapper);if (!CollectionUtils.isEmpty(areas )) {RedisCache redisCache SpringUtils.getBean(RedisCache.class);//先将区域集合整体做个缓存log.info(*******************先将区域集合整体做个缓存*******************);AreaUtil.setAreaListCache(redisCache, areas);//再将每一条区域进行缓存areas.stream().forEach(a - {AreaUtil.setAreaCache(redisCache, a.getId(), a);});}isStart true;log.info(End*******************项目启动后初始化字典到缓存*******************);}catch (Exception e) {e.printStackTrace();}} }导致项目启动速度巨慢,再加上需要使用代理软件才能连接公司的数据库,每次启动项目都需要10几分钟,当真是苦不堪言;由于受不了这样的启动速度,因此决定自己动手优化。 二、解决思路 联想到MySQL的事务打包方式于是自己动手尝试通过Redis打包事务分批提交的方式来提高启动速度,具体实现如下: 三、实现方法 实现方法 Autowiredpublic RedisTemplate redisTemplate; /*** 逐条设置区域缓存** param areas* throws InterruptedException*/public void setAreaCacheItemByItem(ListArea areas) throws InterruptedException {MoreThreadCallBackArea callBack new MoreThreadCallBack();callBack.setThreadCount(10);callBack.setLimitCount(50);callBack.setTitle(设置区域缓存批量任务);callBack.setAllList(areas);callBack.call((list, threadNum) - {//使用自定义线程回调工具分摊任务redisTemplate.execute(new SessionCallbackObject() {Overridepublic Object execute(RedisOperations operations) throws DataAccessException {//开启redis事务operations.multi();list.forEach(item - {operations.opsForValue().set(item.getId(), item);});// 提交事务operations.exec();return null;}});});}线程回调工具MoreThreadCallBack() import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.Lists;import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger;Data Slf4j public class MoreThreadCallBackP {public int limitCount 1000;private int threadCount 10;private ListP allList;private AtomicInteger errorCheck;private String title;public interface CallBackP {void call(ListP list, Integer threadNum);}public boolean call(CallBackP callBack) throws InterruptedException, RuntimeException {if (allList.isEmpty()) {return false;}// 线程池ExecutorService exec Executors.newCachedThreadPool();// 根据大小判断线程数量if (allList.size() limitCount) {threadCount 1;}// 等待结果类final CountDownLatch countDownLatch new CountDownLatch(threadCount);// 分摊多份ListListP llist Lists.newArrayList();for (int i 0; i threadCount; i) {llist.add(Lists.newArrayList());}int index 0;for (P p : allList) {llist.get(index).add(p);index index (threadCount - 1) ? 0 : index 1;}// 异常记录errorCheck new AtomicInteger(0);// 执行for (int i 0; i llist.size(); i) {ListP list llist.get(i);final Integer threadNum i;exec.execute(() - {long startTime System.currentTimeMillis();//抛出异常 自身不处理log.info(标题:{}-{}号线程开始回调执行 数量:{}, this.getTitle(), threadNum, list.size());callBack.call(list, threadNum);long endTime System.currentTimeMillis();log.info(标题:{}-{}号线程回调执行完毕 耗时:{}, this.getTitle(), threadNum, (endTime - startTime));countDownLatch.countDown();});}// 等待处理完毕countDownLatch.await();// 关闭线程池exec.shutdown();return errorCheck.get() 0;}public boolean next() {// 检测是否有线程提前结束if (errorCheck.get() 0) {return false;}return true;}public void error() {errorCheck.incrementAndGet();}public String getTitle() {return title null ? : title;} } 经过如上处理以后,项目启动速度大大提升,由原本的10几分钟缩短至1分钟左右,成果如下:
http://wiki.neutronadmin.com/news/362086/

相关文章:

  • 自学网站官网wordpress修改主题页面
  • 网站建设存在的问题及建议如何做好营销型网站建设
  • 怎么给网站做推广天津个人网站建设
  • 网站工信部不备案吗中国芯片三巨头
  • 做网站属于程序员吗上海比较有名的大公司有哪些
  • 外贸公司的网站怎么做孝感市门户网站
  • 对网站建设的讲话二级注册建造师信息查询官网入口
  • 网站建设兼职在哪找南通做外贸网站
  • 上海建设银行青浦分行网站wordpress 搜索 自定义字段
  • 广州建网站的公司wordpress更新要ftp
  • 黄浦网站建设推广大连网络营销公司有哪些
  • 为学校网站建设wordpress建站环境搭建
  • p站关键词排名桂林 网
  • 江苏城市建设职业学院网站个人或主题网站建设实验报告
  • 国内漂亮大气的网站做网站的软件项目进度计划
  • c2c模式有哪些电商平台上海网站排名优化怎么做
  • 十堰哪里有做网站的企业做网站用什么建站系统
  • 免费网站建设自带后台管理程序网站开发 语言
  • 网站建设跟网站开发有什么区别吗数据调查的权威网站
  • 网络教学平台昆明理工大学企业网站seo优
  • 新兴街做网站公司建设网站需要什么步骤
  • 什么在56网站做推广连云港百度推广网站建设
  • 前端 兼职做网站邯郸市建设局网站2017
  • 企业建网站的工作WordPress page filed
  • 端州网站建设做彩票交流网站犯法吗
  • 济南助企网站建设公司怎么样电商网站开发过程
  • 哈尔滨做网站的oeminc潢川网站建设
  • 6731官方网站下载网站的目标
  • wordpress站点管理员做淘宝客找商品网站有哪些
  • 网站域名注册地址wordpress少女祈祷