redis批量操作及性能分析

用过redis的小伙伴都知道,这东西是C/S的,就单纯的ser key vvv 就要走一次TCP,记得官方是说redis的qps将近10W,这...我不太敢相信,一秒钟之内对一个服务10W次TCP会啥样,当然可以走集群负载均衡,把Redis分片了,但是分片的话又会设计到很多东西,之前我整理过,想了解的看下这: https://blog.csdn.net/u013761036/article/details/103636870 。

OK下面说正事,基于redis的这种模式,我们在日常使用的时候一定要注意进行批量操作,这对系统调优很重要,带来的效果会非常大。

几种常见的批量操作方式

  1. 批量命令(multi)
  2. 管道(pipelining)
  3. 事务(transaction)
  4. 基于事务的管道(transaction pipelining)

1.批量命令:

每个数据类型都对应着几个批量操作的命令,例如mset/mget/hmset/hmget...,这种的一次可以对多个key进行操作,相比于所有姿势这个是最快的,因为这里面的对多个key进行一次性操作,是一个命令,注意,是一个命令。不是把很多命令打包,也不是缓存了很多命令最后一起执行。这是最快的方式。一次连接,一个命令。并且这个是原子操作。但是缺点是并不是所有命令都支持,只支持一小部分基本的命令,所以最终结论是,能用这个就一定用这个,不能的话在用其他批量处理的姿势。

2.管道:

管道的话这么理解,有9个任务,我们直接扔在一个管道里了(过大的话会被自动分批发送),可能会变成3截。每截3个。每次发送一截。这样不用建立9次连接发送9个。3次就可以了,这个就是管道的原理。同时一定要注意,管道的批量操作是建立在协议上的优化,就是就是依靠协议进行分批操作。同时一定一定记住,管道不是原子操作。

3.事务:

这么理解,先喊一声 准备,然后把所有任务都扔在车里(此时已经陆续的传给操作端了),然后再喊开始,所有被传过去的任务才开始执行。就是分三部分,准备好了、上任务、干活。是不是感觉这东西可能会比管道慢点,因为管道是 仍一批过去、干活 再扔一批过去、干活 不用等都到了再开始统一干活。没错。实际测试结果也是事务略微慢于管道一点点,但是重点是这东西是 原子操作 原子操作 原子操作。

4.基于事务的管道:

管道是建立在协议上的,而事务是redis的命令。量道理可以通过协议的思路,也是就是管道把事务给拆成一节一节的。这个姿势就是 基于事务的管道。性能略微好于事务。效果不明显,操作也比较麻烦,所以较少使用。通常姿势就是 能1.批量就批量,不能的话如果必须原子操作就3.事务,否则就2.管道。

5.Redis批量操作原子性:还有就是关于每个姿势到底是不是原子操作这个事,有很多争论,其实要是理解redis工作原理和研究过redis分片的话(最好手写那两个算法,很简单),很容易分清状况,并且考虑的时候要全面,分片姿势有很多种的,虽然常见算法有两种,key范围和hash key,但是别忘记了分片的位置也很关键。你可以在客户端分片(这可能会导致业务代码里有分片代码),也可以在中间件里分,就是把任务都扔给一个类似消息队列的,然后统一处理,再或者自己搭建redis集群,然后在入口负载均衡的地方分。这导致的结果都将不一样,同时还要考虑你每个环节用的什么框架,如果是手写的要看自己的实现方式是啥样的。有的是命令转发,有的是直接自己处理了,然后解析命令了。这都不一样。

等有时间,我会补一个压力测试的笔记。

redis批量操作及性能分析相关推荐

  1. 一次Redis client组件性能分析

    BeetleX也扩展了RedisClient驱动,写这些高并发应用的驱动性能测试分析是必不可少的.在最近一次测试中发现测试采样度不足,引起的一些问题:通过这一次的问题也警醒一下自己在以后设计上要考虑更 ...

  2. redis性能分析工具redis-faina

    redis性能分析工具redis-faina redis-faina是一个通过解析redis的MONITOR命令,从而对redis实例进行性能诊断的工具. 该工具使用虽然简单,但是功能还是很不错,对于 ...

  3. redis geo 性能分析及对问题的思考

    redis geo 性能分析及对问题的思考 文章目录 redis geo 性能分析及对问题的思考 对 redis 进行压力测试 对 redis 进行满载压力分析 georadiusGeneric me ...

  4. redis提高oracle性能,redis性能分析与优化建议

    首先,并不是说redis是内存应用就完全没性能问题,用的不好,还是会出现各种状况,例如RDB频繁,碎片太多等. 性能分析 info信息: 在redis-cli进入登录界面后,输入info all,或者 ...

  5. Linux常用性能分析工具汇总

    文章目录 性能分析工具 top pstree mpstat vmstat pidstat perf proc tcpdump bcc工具箱 cachestat cachetop memleak fil ...

  6. 基于linux服务器的性能分析与优化

    基于linux服务器的性能分析与优化 方面:硬件系统软件网络 现象:系统不稳定相应速度慢 web无法打开打开速度慢 方案:硬件故障更换硬件或升级硬件 系统问题修改系统参数和配置 软件问题修改和升级软件 ...

  7. Python MySQLdb 循环插入execute与批量插入executemany性能分析(list批量写法亲测成功)

    用Python连接MySQL数据库时,会用到MySQLdb库,这里下载↓↓↓ https://pypi.python.org/pypi/MySQL-python/ 这个库提供了对数据库的普遍操作,增删 ...

  8. Redis 数据同步机制分析

    Redis的主从同步机制可以确保redis的master和slave之间的数据同步.按照同步内容的多少可以分为全同步和部分同步:按照同步的时机可以分为slave刚启动时的初始化同步和正常运行过程中的数 ...

  9. 4大JVM性能分析工具详解,及内存泄漏分析方案

    谈到性能优化分析一般会涉及到: Java代码层面的,典型的循环嵌套等 还会涉及到Java JVM:内存泄漏溢出等 MySQL数据库优化:分库分表.慢查询.长事务的优化等 阿里P8架构师谈:MySQL慢 ...

最新文章

  1. silverlight 无法发布 如何灵活配置IP
  2. java递归排雷_C语言实现扫雷小游戏
  3. postgres sql 多表联合查询_从零学会SQL-多表查询
  4. linux驱动模型开发——linux platform总线机制讲解与实例开发
  5. Java黑皮书课后题第7章:**7.3(计算数字的出现次数)编写程序,读取1到100之间的整数,然后计算每个数出现的次数。假定输入0表示结束
  6. 图像处理前沿技术_深入浅出人工智能前沿技术—机器视觉检测,看清人类智慧工业...
  7. 为什么要用!DOCTYPE声明
  8. 【Breadth-first Search 】515. Find Largest Value in Each Tree Row
  9. iOS中的MVC设计模式
  10. 线性表的链表存储实现
  11. android The public type classname must be defined in its own file 报错
  12. mysql服务突然丢失解决方案
  13. php mescroll,mescroll.js上拉加载下拉刷新组件使用详解
  14. Office 浏览器
  15. 2009国家公务员面试过关点点通
  16. 未来教育计算机二级python_计算机二级题库
  17. unity 球体表面平均分割点
  18. python 自动打包pyd
  19. 大兴安岭和大草原的秋季游玩攻略
  20. 有限公司清算组成员怎样构成

热门文章

  1. 让产品有效迭代,前端A/B Testing的简单实现
  2. Apache Ant自动化脚本
  3. maven仓库配置和 修改阿里云镜像
  4. [译]15个关于Chrome的开发必备小技巧
  5. 《HTML5 界面设计与开发》 读书笔记
  6. 超酷的实时颜色数据跟踪javascript类库 - Tracking.js
  7. [置顶] 分步实现具有分页功能的自定义DataList控件【附源代码】
  8. hibernate之关联关系(一对多)
  9. 蓝桥杯 1427 买不到的数目 (模拟)
  10. iOS 集成银联支付swift