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 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...
随机推荐
- C#中获取多个对象list中对象共有的属性项
场景 有一组数据list<TestDataList> 每一个TestDataList是一个对象,此对象可能有温度数据,也可能没有温度数据. 有温度数据的情况下,温度数据属性又是一个list ...
- Add a Class from the Business Class Library从业务类库添加类(EF)
In this lesson, you will learn how to use business classes from the Business Class Library as is. Fo ...
- javaweb 复习随笔
js和jsp区分: js是一种脚本语言,常运行在前台和客户端交互,不会给服务器带来负担,可以更好的修饰静态页面 jsp可以说是servlet的一种,jsp会先翻译,翻译成Servlet执行,运行在服务 ...
- automaticallyAdjustsScrollViewInsets
参考链接: https://www.jianshu.com/p/a1987a7c11ba
- Python日期计算
Python源代码如下: # -*- coding: UTF-8 -*- """ 简述:要求输入某年某月某日 提问:求判断输入日期是当年中的第几天? Python解题思路 ...
- grant localhost and % for mysql
- 初级模拟电路:3-8 BJT数据规格书(直流部分)
回到目录 本小节我们以2N4123通用型BJT硅基晶体管为例,来介绍如何阅读BJT的数据规格书,点此链接可以阅读和下载2N4123的数据规格书. 1. 总体性能 打开datasheet后,首先看标题: ...
- Error creating bean with name 'sqlSessionFactory' defined in class path resource [config/spring/applicationContext.xml]: Invocation of init method failed;
我报的错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSes ...
- goroutine并发之callback回调
玩玩 package main import ( "fmt" "strings" "sync" ) var wait sync.WaitGr ...
- [Linux]线程分离状态的理解
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈)是不释放的.相反, ...