# 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
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
2
3
4
5
6
7
8
9
10
那么在读写的时候就要使用如下的 key 形式来让 hash_tag 生效
product:1:
product_property:1:
product_specification:1:
1
2
3
2
3
这样一来,读写都会使用 :中间: 的字符串来计算 hash 值,就能落地到同一个分片上去了