Redis 命令时间花费多原因及解决办法
Redis 命令时间花费多原因及解决办法
项目问题:
做实时推荐流遇到的问题,一般推荐流是将大的推荐列表划分成多块固定长度(不固定也可以)的内容,并且会记录之前看过的东西,在每次点击刷新后,吐出去来的新的固定块内容(假设k条)。这个过程涉及三个步骤:
- 查询该uid的推荐列表;
- 查询该uid看过的历史记录列表;
- 将历史记录从推荐列表中过滤掉,并吐出新的k条;
数据存储在Redis中,在仿真运行时候,假设给uid吐出200页推荐内容,程序运行的时候,出现了问题:
吐前面页数推荐内容时候挺快的,越往后越慢。
使用的包:
- redis-py [https://github.com/andymccurdy/redis-py]
绝大多数的时间都花在hgetall
上,这里分析是与redis包的反应耗时了,去对应的包里找问题:
这个地方耗时多了,self.read_response()
反应慢了,原因可能是该包是使用python实现的。
再去分析self.read_response()
函数,并查看reds-py项目的Readme
发现:
还有一个hiredis
版本,由redis核心团队用c语言实现的,速度是redis-py
的10倍,果然C语言还是王道啊!
首先判断是否有hiredis,如果有的话,使用hiredis作为解析参数回应
pip安装之后,再次运行程序:
运行时间减少了很多!
总结
- 调包前先好好读读项目的
Readme
文件; - hiredis比redis-py在参数解析上快很多;
- C语言等编程语言比python等脚本语言运行效率高;
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
thinkphp 请求
请求对象由 thinkRequest 负责 只需要依赖注入即可 请求对象 构造方法注入即可 public function __construct(Request $request) { $this->request = $request; } 请求信息 <?php namespace app\index\controller; use think\exception\ValidateException; use think\facade\Request; class Index extends BaseController { /** * 显示资源列表 * * @return \think\Response */ public function index(Request $request) { return Request::url(); } /** * 显示创建资源表单页. * * @return \think\Response */ public function create() { // } /** * 保存新建的资源 * * @param \think\Req...
- 下一篇
你要的 React 面试知识点,都在这了
摘要: 问题很详细,插图很好看。 原文:你要的 React 面试知识点,都在这了 作者:前端小智 Fundebug经授权转载,版权归原作者所有。 React是流行的javascript框架之一,在2019年及以后将会更加流行。React于2013年首次发布,多年来广受欢迎。它是一个声明性的、基于组件的、用于构建用户界面的高效javascript库。 以下是面试前必须了解的话题。 什么是声明式编程 声明式编程 vs 命令式编程 什么是函数式编程 什么是组件设计模式 React 是什么 React 和 Angular 有什么不同 什么是虚拟DOM及其工作原理 什么是JSX 组件和不同类型 Props 和 State 什么是 PropTypes 如何更新状态和不更新状态 组件生命周期方法 超越继承的组合 如何在React中应用样式 什么是Redux及其工作原理 什么是React路由器及其工作原理 什么是错误边界 什么是 Fragments 什么是传送门(Portals) 什么是 Context 什么是 Hooks 如何提高性能 如何在重新加载页面时保留数据 如何从React中调用API 总结...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7设置SWAP分区,小内存服务器的救世主