redis查询优化

背景

搜索推荐中需要结合用户的偏好特征对商品进行重排序,一个商品需要召回8个特征。理论上商品越多,rt越长。现有200个商品需要批量计算。

优化过程:

第一阶段:

刚开始按正向逻辑编写完代码,整个rt在800ms左右,平均到每个商品是4ms左右。对于一般的业务场景,这个rt算比较正常的,但还有优化空间

第二阶段:

使用arthas查看  每次查询特征都是redis,1ms不到。那就用多线程并发请求看看。理论上  4核的cpu,开4个线程,可以提升到150ms。然而在实测过程中,发现rt变长了达到了7000ms,进程直接卡死。
总结一下有两个原因:
1.forkJoin确实是并行在走,但对于每个商品的特征总长度有123个,200个就是246800个。join的过程反而会成为瓶颈
2.redis的server是单线程的nio,多线程查询不会带来实质上的性能优化


第三阶段:

特征时间比较乱,有的是k-v结构,有的是hash结构。k-v结构的可以使用mget一次获取多个key,可以减少很大一部分消耗

经过优化,rt在300ms左右

第四阶段:

接下来优化hash结构的redis数据,这部分无法批量获取,但多次的redis的通信耗时表现在网络层。如果能减少这部分的时间,性能会有较大提升。于是用管道查询的方式,一次提交请求redis处理完以后,一次返回,
这次优化后,rt在40ms左右。

结果:

最终,rt从一开始的800ms,提升到40ms。优化了20倍。

Image placeholder
yunwuxin
未设置
  20人点赞

没有讨论,发表一下自己的看法吧

推荐文章
MySQL 百万级数据量分页查询方法及其优化

作者|大神养成记原文|  http://t.cn/RnvCJnm方法1:直接使用数据库提供的SQL语句语句样式: MySQL中,可用如下方法:SELECT*FROM表名称LIMITM,N适应场景: 适

MySQL 亿级数据数据库优化方案测试-银行交易流水记录的查询

作者:逸宸a链接:https://www.jianshu.com/p/cbdef47fb837对MySQL的性能和亿级数据的处理方法思考,以及分库分表到底该如何做,在什么场景比较合适?比如银行交易流水

css Media媒体查询深入介绍

媒介类型在CSS2中,媒体查询只使用于和标签中,以media属性存在media属性用于为不同的媒介类型规定不同的样式screen计算机屏幕(默认值)tty电传打字机以及使用等宽字符网格的类似媒介tv电

阿里提出针对多目标优化的全新算法框架,同时提升电商推荐场景 GMV 和 CTR

在推荐系统中,多目标优化一直是热门话题,阿里巴巴的XiaoLin、HongjieChen等人针对推荐中的多目标优化问题提出了一种基于帕累托效率的优化算法框架,并应用在电商推荐场景中,对GMV和CTR

PHP 性能优化 - php.ini 配置

内存 默认设置 memory_limit=128M 单个进程可使用的内存最大值,这个值的设定可以从以下几点考虑: 应用的类型。如果是内存集中型应用,可增加该值; 单个PHP进程平均消耗的内存,该值

MySQL 优化笔记

优化方向 SQL优化 sql优化分析 索引优化 优化数据库对象 优化表的数据类型 表拆分(水平、垂直) 反范式 使用中间表 优化mysqlserver mysql内存管理优化 log机制及优化

MySQL 优化笔记

优化方向 SQL优化 sql优化分析 索引优化 优化数据库对象 优化表的数据类型 表拆分(水平、垂直) 反范式 使用中间表 优化mysqlserver mysql内存管理优化 log机制及优化

Laravel-自定义全局函数-ChinaCircle 优化版

看过很多关于helper辅助文件的教程我进行个进一步优化 很多教程都会说,你在composer.json这个文件中通过添加一个自动加载的文件,就可以实现这个需求。但我认为这不是一个好的方式,当你在he

为高性能优化 PHP-FPM

PHP是无处不在的,可以说是互联网Web应用上使用最广泛的语言。 然而,它的高性能并不为人所知,尤其是在涉及到高并发系统时。这就是为什么对于这样特殊的用例,正在被Node(是的,我知道,它不是一种语

上线清单 —— 20 个 Laravel 应用性能优化项

让我们开始吧!假若你的laravel应用已经投入生产环境中。 从第一个用户,到第十,第一百,直到成千上万的用户!慢慢地,随着用户越多,你的网站会越来越慢 那我们应该如何做?细节决定成败 经过一番搜索

TPC-C解析系列03_TPC-C基准测试之SQL优化

TPC-C是一个非常严苛的基准测试模型,考验的是一个完备的关系数据库系统全链路的能力。这也是为什么在TPC-C的榜单前列,出现的永远只是大家熟知的那几家在业界有着几十年积累、从关系数据库理论开始发展就

TPC-C解析系列05_TPC-C基准测试之存储优化

TPC-C规范要求被测数据库的性能(tpmC)与数据量成正比。TPC-C的基本数据单元是仓库(warehouse),每个仓库的数据量通常在70MB左右(与具体实现有关)。TPC-C规定每个仓库所获得的

SACC 2019:云闪付APP架构优化实践之路

中国银联科技事业部架构师 程朝程朝2011年加入中国银联,拥有三年应用开发设计经验,三年MySQL与Redis内核开发设计经验,三年应用架构设计经验;擅长分布式系统设计,有丰富的系统设计与调优经验,现

Hadoop YARN:调度性能优化实践

背景YARN作为Hadoop的资源管理系统,负责Hadoop集群上计算资源的管理和作业调度。美团的YARN以社区2.7.1版本为基础构建分支。目前在YARN上支撑离线业务、实时业务以及机器学习业务。离

陆天炜: GoldenDB事务一致性处理机制优化历程

前言:GoldenDB是中兴通讯推出的一款自研的金融级交易型分布式数据。针对金融行业关注的数据库事务一致性问题,中兴通讯GoldenDB分布式数据库架构师陆天炜,在DTCC2019数据库大会上做了干货

etcd 在超大规模数据场景下的性能优化

作者|阿里云智能事业部高级开发工程师 陈星宇(宇慕)划重点etcd优化背景问题分析优化方案展示实际优化效果本文被收录在5月9日cncf.io官方blog中,链接:https://www.cncf.io

Elasticsearch 亿级数据检索性能优化案例实战!

一、前言数据平台已迭代三个版本,从头开始遇到很多常见的难题,终于有片段时间整理一些已完善的文档,在此分享以供所需朋友实现参考,少走些弯路,在此篇幅中偏重于ES的优化,关于HBase,Hadoop的设计

MySQL 性能优化:8 种常见 SQL 错误用法!

1、LIMIT语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type,name,create_time字段上加组合索引。这样条件排序都

广域网优化:企业如何使用SD-WAN

最近,NetworkComputing与EMA共同发起了一项题为“广域网优化:企业如何使用SD-WAN”的调查,以检研究企业广域网的变化,以及SD-WAN技术在其中所起的作用。调查参与者包括305名企

MySQL优化之覆盖索引的使用

查看测试表结构:mysql>showcreatetableim_message\G ***************************1.row**************************

TPC-C基准测试之链路层优化

作者:易鸿伟闫建良王光树在TPC-C标准定义中,测试系统分为RTE(RemoteTerminalEmulator)和SUT两部分。在实际的TPC-C测试流程中,不只是对DB端能力的考验,对链路中的所有

效率提高N倍的19条MySQL优化秘籍

一、EXPLAIN做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据type列,连接类型。一个好的sql语句至少要达到

一场HBase2.x的写入性能优化之旅

本文通过实战跑分来展示HBase2.x的写入性能首先,简单介绍一下我们的测试环境:集群由5个节点组成,每个节点有12块800GB的SSD盘、24核CPU、128GB内存;集群采用HBase和HDFS混

Kafka 如何优化内存缓冲机制造成的频繁 GC 问题?

目录1、Kafka的客户端缓冲机制2、内存缓冲造成的频繁GC问题3、Kafka设计者实现的缓冲池机制4、总结一下“ 这篇文章,给大家聊一个硬核的技术知识,我们通过Kafka内核源码中的一些设计思想,来

SQL优化案例-定位系统中大量的rollback(十八)

系统中logfilesync比较严重,查看存储都没有问题,logfileparallelwrite很低,时间分布直方图也没问题数据库中提交和回滚操作比较频繁,每秒1000多次,rollback占比1/