原先接口耗时300-3000ms

优化点1,数据确定放在redis

  1. @Override
  2. @Cacheable(value = Consts.Cache.CITY_DATA,unless="#result == null")
  3. public List<Region> cityData() {
  4. Region region = new Region();
  5. region.setType("5");
  6. List<Region> list = this.regionMapper.selectRegionList(region);
  7. List<Region> result = new ArrayList<>();
  8. for(Region r : list){
  9. if(Objects.equals(r.getGrade(),"10")){
  10. result.add(r);
  11. }
  12. }
  13. for(Region r : result){
  14. buildAreaTree(r,list);
  15. }
  16. return result;
  17. }

设置以后可以看到的变化就是没有查询sql,取而代之的是redis生成key的日志keyGenerator

  1. @Configuration
  2. public class CacheConfig extends CachingConfigurerSupport {
  3. @Resource
  4. private RedisConnectionFactory factory;
  5. /**
  6. * 自定义生成redis-key
  7. *
  8. * @return
  9. */
  10. @Override
  11. @Bean
  12. public KeyGenerator keyGenerator() {
  13. return (o, method, objects) -> {
  14. StringBuilder sb = new StringBuilder();
  15. sb.append(o.getClass().getName()).append(".");
  16. sb.append(method.getName()).append(".");
  17. for (Object obj : objects) {
  18. sb.append(obj.toString());
  19. }
  20. System.out.println("keyGenerator=" + sb.toString());
  21. return sb.toString();
  22. };
  23. }
  24. }

优化点2,把json无用的字段就不序列化了

@JsonInclude(_JsonInclude.Include._NON_EMPTY)
类上加上这个注解

@JsonIgnore
没用的字段加上这个注解
可以有效缩短json的大小
这个案例大概减少了30%的大小吧

优化点3,后端增加http压缩

springboot的jar包形式

  1. server:
  2. compression:
  3. enabled: true

tomcat的war包形式

在server.xml中,在Connector标签中加入如下属性
compression=”on”
compressionMinSize=”2048”
compressableMimeType=”text/html,text/css,text/javascript”

结果

这个是优化完的
image.png
image.png
这个是没有做后端压缩的
image.pnga498dc7d4c7a58983a5061b141eac0f.png
最开始什么都没优化的时候是700多k,1-5秒的响应时间

报文也发生了变化
image.png
多了这2个东西

总结

优化还是比较有意思的,就是费时间