Q:Redis客户端的批处理大量数据请求时,如何优化请求速率?

A:管道技术:Redis是基于客户端-服务端模型的TCP请求/响应服务,且是阻塞式的,客户端需要等待服务端处理完数据后返回状态,才能继续,这意味着频繁的请求、响应,不管RTT(往返时间)大小,都会造成过多时间消耗。客户端大数据且数据之间无状态的情况下,可以采用管道技术。一个请求/相应服务可以实现为,即使客户端没有读取到旧请求的响应,服务端依旧可以处理新请求。通过这种方式,可以完全无需等待服务端应答地发送多条指令给服务端,并最终一次性读取所有应答。管道技术最显著的优势是提高了redis服务的性能。需要注意到是用pipeline方式打包命令发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。打包的命令越多,缓存消耗内存也越多。所以并是不是打包的命令越多越好。具体多少合适需要根据具体情况测试。大家可以分别调用以下方法,并记录时间比较,性能提升很大。

private static void withoutPipeline() {
try {
Jedis jedis = new Jedis("192.167.3.145", 6379);
for (int i = 0; i < 1000; i++) {
jedis.incr("testkey");
}
jedis.disconnect();
} catch (Exception e) {
}
} private static void usePipeline() {
try {
Jedis jedis = new Jedis("192.167.3.145", 6379);
Pipeline pipeline = jedis.pipelined();
for (int i = 0; i < 1000; i++) {
pipeline.incr("testkey");
}
pipeline.sync();
jedis.disconnect();
} catch (Exception e) {
}
}

Q:Redis持久化如何做到尽量保证数据一致性的前提下,性能影响较小?

A:个人建议,搭建主从,主服务不启动持久化操作,使其性能全用于write操作。从服务进行读服务,并配置持久化,在数据要求一致性较高的情况下,最好采用aof文件追加模式,并且定期执行bgrewriteaof命令,重构aof文件,避免大量重复的命令,如果对从服务性能无要求,可同时开启快照模式。同时主从配合哨兵监控使用,避免主节点挂掉后服务不可用。需要注意的是,Redis更注重性能,所以对一致性不做强制要求,实现机制决定了它舍弃了数据的强一致性,从而换取了性能提升。比如以下情况可能会存在数据丢失:主服务默认在处理完客户端请求后,返回状态,因为以性能为重,所以此时还未有复制数据到从节点的操作,此时主服务down掉,自然数据就丢失了;aof策略中有一个规则是每秒写一次,自然,在写之前服务挂掉,有可能也会损失部分数据。Redis官网建议,在数据要求不高的情况下,建议使用快照方式。

Q:Redis集群在什么情况下会不可用?

A:两种情况:1、当集群中某个主节点挂掉,且没有课替换它的可用从节点时,集群会进入fail状态。这是因为主节点挂掉后,会导致部分槽位失效,key值映射不完整。2、集群中超过半数以上的master挂掉,不管是否有slave替换,都将进入fail状态。

Redis之自问自答的更多相关文章

  1. [python]自问自答:python -m参数?

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  2. 自问自答之VR遐想

    先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...

  3. [python]自问自答:python -m参数? (转)

    python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  4. [python]自问自答:python -m参数? (转) ( python2.7 版本 )

    原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...

  5. css自问自答(二)

    css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...

  6. css自问自答(一)

    css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...

  7. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...

  8. 区块链自问自答 day1

    区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 ​ 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...

  9. 区块链自问自答 day2

    区块链自问自答 day2 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? ​ 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...

随机推荐

  1. 项目中使用http referer,为了盗取图片资源

    项目背景:因为图片的数据是爬取的别人的图片,而且保存的数据仅仅是图片地址链接,为了减少数据存储和服务器压力,但是这就引发一个问题,有的图片地址没有做防盗处理,可以随意的下载使用:但有些图片的服务器做了 ...

  2. opencv-python 图像基础处理(四)

    图像梯度-Sobel算子 Gx等于左边减去右边    Gy等于下减去上 可以得到像素值 dst = cv2.Sobel(src, ddepth, dx, dy, ksize)- ddepth:图像的深 ...

  3. 【分享】git全套视频教程

    1.课件 https://www.cnblogs.com/wfd360/p/10891140.html 2.教程列表 3.教程下载 3.1.直接在线学习 学习地址:https://study.163. ...

  4. platform平台device和driver如何匹配【转】

    转自:https://www.cnblogs.com/sky-heaven/p/6869591.html 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接 ...

  5. 关于CCTextFieldTTF的几点注意事项

    TextField 基本名词 IME:输入法编辑器 placeholder:默认显示 事项 两种创建方式,一种是以文字的大小为准,此时如果如果内容超过编辑框大小,会自动扩展:另一种添加了对编辑框大小的 ...

  6. LRU hashMap(拉链) + 双向链表 java实现

    //基于 hash (拉链法) + 双向链表,LRUcache //若改为开放寻址,线性探测法能更好使用cpuCache public class LRU { private class Node { ...

  7. JavaScript-----6.流程控制:分支

    1.流程控制 就是来控制代码按照何种顺序来执行,流程控制有三种结构:顺序结构.分支结构.循环结构 2.顺序流程控制 程序按照代码先后顺序依次执行 3.分支流程控制 JS中提供两种分支结构语句:if语句 ...

  8. Java Web 学习(8) —— Spring MVC 之文件上传与下载

    Spring MVC 之文件上传与下载 上传文件 表单: <form action="upload" enctype="multipart/form-data&qu ...

  9. 【Oracle】常用的SQL语句

    抄自:https://www.cnblogs.com/qiu18359243869/p/9474515.html 提示:dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里 ...

  10. 基于 Swoole 的轻量级框架 CabalPHP

    CabalPHP CabalPHP 是一个基于Swoole的轻量.高效.全异步开源框架. 亮点 全异步单机超高性能,轻松分布式部署 支持HTTP.TCP.websocket等多种协议 完善数据库引擎, ...