Redis压测脚本及持久化机制
Redis压测脚本及持久化机制
Redis性能压测脚本
Redis的所有数据是保存在内存当中的,得益于内存高效的读写性能,Redis的性能是非常强悍的。但是,内存的缺点是断电即丢失,所以,在实际项目中,Redis一旦需要保存一些重要的数据,就不可能完全使用内存保存数据。因此,在真实项目中要使用Redis,一定需要针对应用场景,对Redis的性能进行估算,从而在数据安全性与读写性能之间找到一个平衡点。
Redis提供了压测脚本redis-benchmark,可以对Redis进行快速的基准测试。(redis-benchmark更多参数,使用redis-benchmark --help指令查看)
# 20个线程,100W个请求,测试redis的set指令(写数据)
redis-benchmark -a 123qweasd -t set -n 1000000 -c 20
...
Summary:
throughput summary: 116536.53 requests per second ##平均每秒11W次写操作。
latency summary (msec):
avg min p50 p95 p99 max
0.111 0.032 0.111 0.167 0.215 3.199
Redis数据持久化机制详解
Redis提供了很多跟数据持久化相关的配置,大体上,可以组成以下几种策略:
- 无持久化:完全关闭数据持久化,不保证数据安全。相当于将Redis完全当做缓存来用
- RDB(RedisDatabase):按照一定的时间间隔缓存Redis所有数据快照。
- AOF(Append Only File):记录Redis收到的每一次写操作。这样可以通过操作重演的方式恢复Redis的数据
- RDB+AOF:同时保存Redis的数据和操作。
两种方式的优缺点:
RDB
优点:
1.RDB文件非常紧凑,非常适合定期备份数据。
2.RDB快照非常适合灾难恢复。
3.RDB备份时性能非常快,对主线程的性能几乎没有影响。RDB备份时,主线程只需要启动一个负责数据备份的子线程即可。所有的备份工作都由子线程完成,这对主线程的IO性能几乎没有影响。
4.与AOF相比,RDB在进行大数据量重启时会快很多。
缺点:
1.RDB不能对数据进行实时备份,所以,总会有数据丢失的可能。
2.RDB需要fork化子线程的数据写入情况,在fork的过程中,需要将内存中的数据克隆一份。如果数据量太大,或者CPU性能不是很好,RDB方式就容易造成Redis短暂的服务停用。相比之下,AOF也需要进行持久化,但频率较低。并且你可以调整日志重写的频率。
AOF
- 优点:
AOF持久化更安全。例如Redis默认每秒进行一次AOF写入,这样,即使服务崩溃,最多损失一秒的操作。
AOF的记录方式是在之前基础上每次追加新的操作。因此AOF不会出现记录不完整的情况。即使因为一些特殊原因,造成一个操作没有记录完整,也可以使用redis-check-aof工具轻松恢复。
当AOF文件太大时,Redis会自动切换新的日志文件。这样就可以防止单个文件太大的问题。
AOF记录操作的方式非常简单易懂,你可以很轻松的自行调整日志。比如,如果你错误的执行了一次 FLUSHALL 操作,将数据误删除了。使用AOF,你可以简单的将日志中最后一条FLUSHALL指令删掉,然后重启数据库,就可以恢复所有数据。
- 缺点:
针对同样的数据集,AOF文件通常比RDB文件更大。
在写操作频繁的情况下,AOF备份的性能通常比RDB更慢。
总结
如果你只是把Redis当做一个缓存来用,可以直接关闭持久化。
如果你更关注数据安全性,并且可以接受服务异常宕机时的小部分数据损失,那么可以简单的使用RDB策略。这样性能是比较高的。
不建议单独使用AOF。RDB配合AOF,可以让数据恢复的过程更快。
RDB详解
RDB能干什么
RDB可以在指定的时间间隔,备份当前时间点的内存中的全部数据集,并保存到餐盘文件当中。通常是dump.rdb文件。在恢复时,再将磁盘中的快照文件直接都会到内存里。
由于RDB存的是全量数据,你甚至可以直接用RDB来传递数据。例如如果需要从一个Redis服务中将数据同步到另一个Redis服务(最好是同版本),就可以直接复制最近的RDB文件。
何时触发RDB备份
到达配置文件中默认的快照配置时,会自动触发RDB快照
手动执行save或者bgsave指令时,会触发RDB快照。 其中save方法会在备份期间阻塞主线程。bgsve则不会阻塞主线程。但是他会fork一个子线程进行持久化,这个过程中会要将数据复制一份,因此会占用更多内存和CPU。
主从复制时会触发RDB备份。LASTSAVE指令查看最后一次成功执行快照的时间。时间是一个代表毫秒的LONG数字,在linux中可以使用date -d @{timestamp} 快速格式化。
AOF详解
AOF能干什么
以日志的形式记录每个写操作(读操作不记录)。只允许追加文件而不允许改写文件。
AOF日志恢复
如果Redis服务出现一些意外情况,就会造成AOF日志中指令记录不完整。例如,手动编辑appendonly.aof.1.incr.aof日志文件,在最后随便输入一段文字,就可以模拟指令记录不完整的情况。
混合持久化策略
RDB和AOF两种持久化策略各有优劣,所以在使用Redis时,是支持同时开启两种持久化策略的。在redis.conf配置文件中,有一个参数可以同时打开RDB和AOF两种持久化策略。
这也说明,如果同时开启RDB和AOF两种持久化策略,那么Redis在恢复数据时,其实还是会优先选择从AOF的持久化文件开始恢复。因为通常情况下,AOF的数据集比RDB更完整。而且AOF的持久化策略现在已经明确包含了RDB和AOF两种格式,所以AOF恢复数据的效率也还是比较高的。
但是要注意,既然服务重启时只找AOF文件,那是不是就不需要做RDB备份了呢?通常建议还是增加RDB备份。因为AOF数据通常在不断变化,这样其实不太利于定期做数据备份。所以通常建议保留RDB文件并定期进行备份,作为保证数据安全的后手。
最后要注意,Redis的持久化策略只能保证单机的数据安全。如果服务器的磁盘坏了,那么再好的持久化策略也无法保证数据安全。如果希望进一步保证数据安全,那就需要增加以下几种集群化的方案了。
Redis压测脚本及持久化机制的更多相关文章
- 手把手用Monkey写一个压测脚本
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 允许有条件转载,转载请附带底部二维码. 一.为什么需要一个测试脚本? 昨天讲解了Android Monkey命 ...
- jmeter压测脚本编写与静态文件处理
一.压测脚本编写 概述:工具为谷歌浏览器-->F12-->Network,访问被测站点,通过其中的请求的地方来构造压测脚本 二.静态文件处理 概述:静态文件包括css/js/图片等,它们有 ...
- 一文揭秘测试平台中是如何将测试用例一键转化Jmeter压测脚本
接上篇,一键转化将接口测试平台测试用例转化成Jmeter压测脚本思路,这里我首先在java 上面做了一个简单的实验,看看 转化的中间遇到的问题,这里呢,我只是给了一个简单的demo 版本, ...
- JMeter扩展Java请求实现WebRTC本地音视频推流压测脚本
WebRTC是Web Real-Time Communication缩写,指网页即时通讯,是一个支持Web浏览器进行实时语音或视频对话的API,实现了基于网页的视频会议,比如声网的Agora Web ...
- 基于Locust实现MQTT协议服务的压测脚本
最近在忙业务的间隙,穿插着做了些性能测试. 一.背景简介 业务背景大概介绍一下,就是按照国标规定,车辆需要上传一些指定的数据到ZF的指定平台,同时车辆也会把数据传到企业云端服务上,于是乎就产生了一些性 ...
- 【原】shell编写一个简单的jmeter自动化压测脚本
在公司做压力测试也挺长时间了,每次测试前环境数据准备都需要话费较长时间,所以一直在考虑能不能将整个过程实现自动化进行,于是就抽空写了一个自动化脚本,当然这个脚本目前功能十分简陋,代码也不完善,很有很多 ...
- ab压力测试工具-批量压测脚本
ab(Apache benchmark)是一款常用的压力测试工具.简单易用,ab的命令行一次只能支持一次测试.如果想要批量执行不同的测试方式,并自动对指标进行分析,那么单靠手工一条一条命令运行ab,估 ...
- 无界面运行Jmeter压测脚本 --后知者
原文作者---后知者 原文地址:http://www.cnblogs.com/houzhizhe/p/8119735.html [后知者的故事]:针对单一接口压测时出现了从未遇到的问题,设好并发量后用 ...
- 无界面运行Jmeter压测脚本
今天在针对单一接口压测时出现了从未遇到的问题,设好并发量后用调度器控制脚本的开始和结束,但在脚本应该自动结束时间,脚本却停不下来,手动stop报告就会有error率,卡了我很久很久不能解决,网络上也基 ...
- java编写jmeter压测脚本
目前项目中接触的比较多的是接口测试,功能测个差不多后会对部分接口进行压测,采用的是java编写脚本,导入jmeter进行压测. 使用到的jmeter的相关包 写一个测试类,继承AbstractJava ...
随机推荐
- 区块链技术已经衰落了吗?(区块链已die)
区块链技术已经好多年没有听到有人提了,不过比特币却一直是不是的又新闻出现,当然国内已经把比特币交易归入到了不合法的地位了.区块链技术是国家战略的技术,但是这个技术说实话确实不是很高深,或者说蛮easy ...
- [转]GMM:高斯混合模型讲义(台湾)
- 开源即时通讯IM框架MobileIMSDK的Uniapp端开发快速入门
► 相关链接: ①MobileIMSDK-Uniapp端的详细介绍 ② MobileIMSDK-Uniapp端的开发手册new(* 精编PDF版) 一.理论知识准备 您需要对Uniapp和Vue开发有 ...
- IM开发者的零基础通信技术入门(十):零基础,史上最强5G技术扫盲
本文引用了"鲜枣课堂"的<史上最强5G科普>文章内容.为了更好的内容呈现,在引用和收录时内容有改动,转载时请注明原文来源. 1.内容概述 ➊ 5G技术的关注度越来越高: ...
- JVM实战—5.G1垃圾回收器的原理和调优
大纲 1.G1垃圾回收器的工作原理 2.G1分代回收原理-性能为何比传统GC好 3.使用G1垃圾回收器时应如何设置参数 4.如何基于G1垃圾回收器优化性能 5.问题汇总 1.G1垃圾回收器的工作原理 ...
- Solution -「NEERC 2016」Delight for a Cat 的一个尝试
\(\mathscr{Description}\) Link. 给定 \(n,k,m_s,m_e\) 和两个长为 \(n\) 的序列 \(\{s\},\{e\}\), 选择一个 \(S\sub ...
- w3cschool-HBase官方文档-3MapReduce
HBase和MapReduce 2018-03-30 13:59 更新 HBase和MapReduce Apache MapReduce 是一个用于分析大量数据的软件框架.它由 Apache Hado ...
- Java并发包常用类用法及原理
com.java.util.concurrent包是java5时添加的,专门处理多线程提供的工具类 一.Atomic 二.Lock 三.BlockingQueue 四.BlockDeque 五.Con ...
- biancheng-Linux教程
目录http://c.biancheng.net/linux_tutorial/ 1Linux简介2Linux安装3Linux文件和目录管理4Linux打包(归档)和压缩5Vim文本编辑器6Linux ...
- 基于FATE的可验证秘密分享算法详解及应用场景分享:学习
内容来自"光大科技-基于FATE的可验证秘密分享算法详解及应用场景分享" 理论 基于Shamir的秘密共享方案,通过多项式插值实现. 加入可验证功能,即发送多项式系数的模数给对方作 ...