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. 蓝色大气简约立体答辩ppt模板推荐

    小编个人非常喜欢这个模版,大气深蓝色,具有科技感,非常适合学生的毕业答辩PPT模板. 模版来源:http://ppt.dede58.com/gongzuohuibao/26496.html

  2. U盘的几种分类及格式

    u盘常见的几种分类: 1.按u盘材质来分,可以分为金属u盘.塑料u盘.软胶u盘.皮革u盘.木质u盘.珠宝u盘等.这些主要是考虑u盘本身外壳所用材质的. 2.从u盘容量来分,就是8GB.16GB.32G ...

  3. 工作日志,go get -v -x github.com/pebbe/zmq4 失败问题

    工作日志,go get -v -x github.com/pebbe/zmq4 失败问题 笔者因为工作需要使用ZeroMQ,但是在执行go get -v -x github.com/pebbe/zmq ...

  4. 更改 undo_retention 时,Lob retention 不更改 (Doc ID 563470.1)

    Lob retention not changing when undo_retention is changed (Doc ID 563470.1) APPLIES TO: Oracle Datab ...

  5. ElasticSearch7 设置外网访问失败

    elasticsearch外网访问9200端口失败,bootstrap checks failed,the default discovery settings are unsuitable for ...

  6. OSPF与ACL综合实验

    OSPF与ACL综合实验 1.实验内容 (1)企业内网运行OSPF路由协议,区域规划如拓扑图所示(见3.实验拓扑图): (2)财务和研发所在的区域不受其他区域链路不稳定性影响: (3)R1.R2.R3 ...

  7. MATLAB实例:构造网络连接图(Network Connection)及计算图的代数连通度(Algebraic Connectivity)

    MATLAB实例:构造网络连接图(Network Connection)及计算图的代数连通度(Algebraic Connectivity) 作者:凯鲁嘎吉 - 博客园 http://www.cnbl ...

  8. 文件操作NIO

    在丑陋的 Java I/O 编程方式诞生多年以后,Java终于简化了文件读写的基本操作. 两个基本组件 文件或者目录的路径: 文件本身. 这块基本都是些记忆性的东西,没什么过多的需要写的地方,用的时候 ...

  9. Node.js实现登录注册功能

    使用Node.js + Navicat for mysql实现的登录注册功能 数据库中存在有”user_id,user_name,password,user_img,user_number“字段,其中 ...

  10. 一天两道PAT(1)

    其实是从昨天开始刷的,备战一下PAT(乙级,菜鸡不解释,希望几个月下来能有长进吧),做了一下,发现自己的算法功底好差啊..... 先上题目 1. 字符串中必须仅有P, A, T这三种字符,不可以包含其 ...