欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习笔记(15)商品详情

程序员文章站 2022-06-06 08:06:20
...

学习笔记(15)商品详情

商品详情是一个高并发访问的功能

我们需要考虑缓存、考虑性能、考虑机器压力。

京东商城:一个请求过去,所有数据都来了。

学习笔记(15)商品详情

1)、服务拆分查询

​ 查询商品基础信息

​ 查询sku组合信息

​ 点击sku组合查询商品基础信息+sku信息(特别是库存)

​ 商品的所有属性信息

​ 大数据不可以联表(数据太多)。

​ 1)、禁用联表。

​ 2)、MySQL表有极限。大数据表分表;

2)、做好容错。

​ 如果sku组合查询库存以及售价出现问题,返回兜底数据。

分表:
学习笔记(15)商品详情

数据量更大时,还会采用分库:

学习笔记(15)商品详情

sahrding-jdbd 能分表,用其存数据,但是不能用其查数据库,数据异构的统一解决方案 es

如何知道一号商品有哪些属性且对应的值是哪些?

用es检索一号商品,再在es的属性索引下检索一号商品有哪些属性,es还有值索引,再去检索es对应的哪些值。es只需要做好集群,所有数据进入es。

学习笔记(15)商品详情

三写:

1)、给数据库存东西

1)、给缓存一份(用id查的快)

2)、给es一份(用其他字段查的快)

复杂查询,es先查出商品id,再直接从缓存中拿。

商品详情页请求:http://localhost:8081/detail/28

  @Override
    public EsProduct productAllInfo(Long id) {
        EsProduct esProduct = null;
        //按照id查出商品
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.query(QueryBuilders.termQuery("id",id));


        Search build = new Search.Builder(builder.toString())
                .addIndex(EsConstant.PRODUCT_ES_INDEX)
                .addType(EsConstant.PRODUCT_INFO_ES_TYPE)
                .build();
        try {
            SearchResult execute = jestClient.execute(build);

            List<SearchResult.Hit<EsProduct, Void>> hits = execute.getHits(EsProduct.class);
            esProduct = hits.get(0).source;
        } catch (IOException e) {

        }


        return esProduct;
    }

    @Override
    public EsProduct produSkuInfo(Long id) {
        EsProduct esProduct = null;
        //按照id查出商品
        SearchSourceBuilder builder = new SearchSourceBuilder();
        builder.query(QueryBuilders.nestedQuery("skuProductInfos",QueryBuilders.termQuery("skuProductInfos.id",id), ScoreMode.None));


        Search build = new Search.Builder(builder.toString())
                .addIndex(EsConstant.PRODUCT_ES_INDEX)
                .addType(EsConstant.PRODUCT_INFO_ES_TYPE)
                .build();
        try {
            SearchResult execute = jestClient.execute(build);

            List<SearchResult.Hit<EsProduct, Void>> hits = execute.getHits(EsProduct.class);
            esProduct = hits.get(0).source;
        } catch (IOException e) {

        }
        return esProduct;
    }

数据成功检索,只不过前端没有解析

学习笔记(15)商品详情

//8s  2.5s; 需要速度快。 开启异步化 最多1s,取决最长的服务调用。
//高并发系统的优化
//1、加缓存
//2、开异步
相关标签: 项目笔记