# 184. 商品详情页动态渲染系统:twemproxy hash tag + mget 优化思路介绍

用 twemproxy 其实就是将 Redis 集群做成了很多个分片,相当于是部署了很多个 redis 主实例, 通过 twemproxy 中间件,将数据散列存储到多个 redis 实例中去,每个 redis 实例中存储一部分的数据

之前在商品聚合服务中(eshop-dataaggr-service)使用了 mget 来优化一次获取多个 key 的操作,如下的 key

product_1
product_property_1
product_specification_1
1
2
3

这里在 twemproxy 中来说就会存在一个问题,这三个 key 可能会散列到多个 redis 中去, 所以就会走多次网络才能拿到这三个数据。

那么这里可以使用 hash tag 这个功能来让这三个 key 落到同一个 redis 分片上去

vi conf/nutcracker.yml

redis-master:   # 配置一个逻辑名称
  # listen: 127.0.0.1:1111
  listen: 192.168.99.11:1111
  hash: fnv1a_64
  hash_tag: "::"     # 增加此配置
  distribution: ketama
  redis: true
  servers:
   - 192.168.99.11:6401:1 redis01  # 指向两个主集群
   - 192.168.99.11:6402:1 redis02
1
2
3
4
5
6
7
8
9
10

那么在读写的时候就要使用如下的 key 形式来让 hash_tag 生效

product:1:
product_property:1:
product_specification:1:
1
2
3

这样一来,读写都会使用 :中间: 的字符串来计算 hash 值,就能落地到同一个分片上去了