Redis之自问自答
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之自问自答的更多相关文章
- [python]自问自答:python -m参数?
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- 自问自答之VR遐想
先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- [python]自问自答:python -m参数? (转) ( python2.7 版本 )
原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...
- css自问自答(二)
css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...
- css自问自答(一)
css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- 区块链自问自答 day2
区块链自问自答 day2 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...
随机推荐
- Ling to sql 多表查询,多个条件进行关联
使用多表查询进行关联时,提示 join子句中其中一个表达式的类型不正确,注意字段类型和名称要一致,否则join时提示语法错误,错误截图如下 var incomeDetails = from a in ...
- CSS 从大图中选取部分区域作为目标图标
从大图中选取部分区域作为目标图标 by:授客 QQ:1033553122 1.图片素材 图片素材如下(大小:137px * 264px),图中从上到下,连续存放了两张100px * 100px的图 ...
- 小程序Canvas性能优化实战
以下内容转载自totoro的文章<小程序Canvas性能优化实战!> 作者:totoro 链接:https://blog.totoroxiao.com/canvas-perf-mini/ ...
- Python 3 线程模型,进程模型记录
最近需要使用 python3 多线程处理大型数据,顺道探究了一下,python3 的线程模型的情况,下面进行简要记录: 多线程运行的优点: 使用线程可以把程序中占用时间较长的任务放到后台去处理: 用户 ...
- Redis—简介与安装
Redis 简介 Redis 安装 Redis 配置文件 # Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程.daemonize yes # 当Redis以守护进 ...
- platform平台device和driver如何匹配【转】
转自:https://www.cnblogs.com/sky-heaven/p/6869591.html 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接 ...
- Spring汇总
如今做Java尤其是web几乎是避免不了和Spring打交道了,但是Spring是这样的大而全,新鲜名词不断产生,学起来给人一种凌乱的感觉,我就在这里总结一下,理顺头绪. Spring Spring ...
- 设计模式-Strategy Strategy将算法封装到类中,通过组合的方式 将具体算法的实现在组合对象中实现
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //strategy.h #pragma once class Strategy { public: Strategy(); ...
- CF1244F Chips
题目链接 problem 有一个长度为\(n\)个点连成的环.每个点为黑色或白色.当一个点和与他相邻的两个点颜色不同时.该点的颜色就会改变. 问改变\(K\)次后每个点的颜色. solution 发现 ...
- 【HDU4947】GCD Array(莫比乌斯反演+树状数组)
点此看题面 大致题意: 一个长度为\(n\)的数组,实现两种操作:将满足\(gcd(i,k)=d\)的\(a_i\)加上\(v\),询问\(\sum_{i=1}^xa_i\). 对于修改操作的推式子 ...