# 176. 商品详情页动态渲染系统:完成多级缓存全链路的测试多个 bug 修复

这里就是之前写好的逻辑进行测试,我这里也不测了,因为 nginx 没有实现,之前在每章写完都测试过。

# bug 1:无法连接 twemproxy

这里唯一需要注意的就是,上一章节的数据直连服务这里测试下。

访问地址:http://localhost:9110/product/1,但是发现无法连接上 twemproxy。 原因如下,listen 中监听的是 127.0.0.1 ,所以不是在本机的时候是连接不上的,只需要修改成局域网 ip 即可

[root@eshop-detail01 twemproxy-0.4.0]# vi conf/nutcracker.yml

redis-master:   # 配置一个逻辑名称
  # listen: 127.0.0.1:1111
  listen: 192.168.99.11:1111
  hash: fnv1a_64
  distribution: ketama
  redis: true
  servers:
   - 192.168.99.11:6401:1 redis01  # 指向两个主集群
   - 192.168.99.11:6402:1 redis02

redis-slave:  # 从集群
 listen: 127.0.0.1:1112
 hash: fnv1a_64
 distribution: ketama
 redis: true
 servers:
  - 192.168.99.11:6403:1 redis01
  - 192.168.99.11:6405:1 redis02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

重启 twemproxy

cd /usr/local/twemproxy/twemproxy-0.4.0
[root@eshop-detail01 twemproxy-0.4.0]# ps -ef | grep nutcracker
root      7606     1  0 Jul28 ?        00:00:00 ./src/nutcracker -d -c conf/nutcracker.yml
root     31766 26460  0 02:17 pts/0    00:00:00 grep nutcracker
[root@eshop-detail01 twemproxy-0.4.0]# kill 7606
[root@eshop-detail01 twemproxy-0.4.0]# ./src/nutcracker -d -c conf/nutcracker.yml
1
2
3
4
5
6

# bug 2:获取商品属性返回的应该是一个列表

String productPropertyJsonStr = eshopProductService.findProductPropertyByProductId(productId);
if (StringUtils.isNotBlank(productPropertyJsonStr)) {
    product.put("productProperty", JSON.parseArray(productPropertyJsonStr));
}
String productSpecificationJsonStr = eshopProductService.findProductSpecificationByProductId(productId);
if (StringUtils.isNotBlank(productSpecificationJsonStr)) {
    product.put("productSpecification", JSON.parseArray(productSpecificationJsonStr));
}
1
2
3
4
5
6
7
8

获取 ProductProperty 与 ProductSpecification ,一个商品都有多个属性和规格,所以这里也需要修改成数组, 那么同样的,我觉得数据聚合里面,维度数据这里之前也是错误的,也应该修改成数组

# bug 改完,测试

访问地址:http://localhost:9110/product/1

然后查看 redis 中是否有维度数据

[root@eshop-detail01 src]# ./redis-cli -h 192.168.99.11 -p 1111
192.168.99.11:1111> get dim_product_1
1
2