背景:在过滤器中调用了用户平台的一个接口,由于每次页面请求都要经过过滤器,所以每次请求也都会调用用户平台接口,造成该接口QPS过高达每秒钟900次,远远高于标准。需优化。
分析:过滤器中调用用户平台接口是为了获取该登录用户信息,用户信息有两个方面的用途。一是为了校验更新用户cookie头像、校验更新token、为雷达统计埋点。二是为将用户信息放入ThreadLocal里,这样在每次请求时需要获取用户信息的地方直接从ThreadLocal中取。避免了重复调用用户平台造成放水操作。
方案:上面说的第一个目的对于时效性要求不好,所以可以给查询用户平台做缓存(1个小时),而不在过滤器中将用户信息放入ThreadLocal,而是在一个公共的方法中查询用户信息并放入ThreadLocal,这样不比每次请求(无论用没用到用户信息的请求)都查询用户平台,会大大减少对用户平台的调用次数,从而降低访问用户平台的QPS。