redis分享
Redis介绍
port 7000:服务端口。
daemonize yes:修改服务为后台运行。
pidfile /var/run/redis_7000.pid:指定不同的pid文件。
logfile "/var/redis/7000.log":指定log日志路径。
dir /opt/redis-cluster/redis-7000:这个指定rdb,aof文件的路径配置。
requirepass ibethfy:客户端访问需要密码验证。
scan cursor [match pattern] [count number]
cursor是必需参数,实际上cursor是一个游标,第一次遍历从0开始,每
次scan遍历完都会返回当前游标的值,直到游标值为0,表示遍历结束。
match pattern是可选参数,它的作用的是做模式的匹配,这点和keys的模式匹配很像。
count number是可选参数,它的作用是表明每次要遍历的键个数,默认值是10,此参数可以适当增大
scan 0 match * count 3
1、使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改时,自动触发bgsave。可配置多个。
2、如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点。
3、执行debug reload命令重新加载Redis时,也会自动触发save操作。
4、默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。
bgsave流程:
1)执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如RDB/AOF子进程,如果存在bgsave命令直接返回。
2)父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗时,单位为微秒。
3)父进程fork完成后,bgsave命令返回“Background saving started”信息并不再阻塞父进程,可以继续响应其他命令。
4)子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。执行lastsave命令可以获取最后一次生成RDB的时间,对应info统计的rdb_last_save_time选项。
5)进程发送信号给父进程表示完成,父进程更新统计信息。
RDB优缺点
优点
缺点
Redis使用单线程响应命令,如果每次写AOF文件命令都直接追加到硬盘,那么性能完全取决于当前硬盘负载。先写入缓冲区aof_buf中,还有另一个好处,Redis可以提供多种缓冲区同步硬盘的策略,在性能和安全性方面做出平衡。
AOF重写触发机制
1)执行AOF重写请求。
如果当前进程正在执行AOF重写,请求不执行并返回如下响应:
ERR Background append only file rewriting already in progress
334
如果当前进程正在执行bgsave操作,重写命令延迟到bgsave完成之后再
执行,返回如下响应:
Background append only file rewriting scheduled
2)父进程执行fork创建子进程,开销等同于bgsave过程。
3.1)主进程fork操作完成后,继续响应其他命令。所有修改命令依然写
入AOF缓冲区并根据appendfsync策略同步到硬盘,保证原有AOF机制正确
性。
3.2)由于fork操作运用写时复制技术,子进程只能共享fork操作时的内
存数据。由于父进程依然响应命令,Redis使用“AOF重写缓冲区”保存这部
分新数据,防止新AOF文件生成期间丢失这部分数据。
4)子进程根据内存快照,按照命令合并规则写入到新的AOF文件。每
次批量写入硬盘数据量由配置aof-rewrite-incremental-fsync控制,默认为
32MB,防止单次刷盘数据过多造成硬盘阻塞。
5.1)新AOF文件写入完成后,子进程发送信号给父进程,父进程更新
统计信息,具体见info persistence下的aof_*相关统计。
5.2)父进程把AOF重写缓冲区的数据写入到新的AOF文件。
5.3)使用新AOF文件替换老文件,完成AOF重写。
集群扩容
集群迁移
最新文章
- TCP/IP之Nagle算法与40ms延迟
- git&;sourcetree安装及在IntelliIJ下拉取项目基础使用
- Ubuntu 编译安装 Linux 4.0.5 内核,并修复 vmware 网络内核模块编译错误
- Unichar, char, wchar_t
- 请问view controller scene,该如何删除
- iis 重启 (三种方法)
- C++引用(Reference)
- Android系统服务-简介
- Oracle中中文、数字,英文混杂形式的字段进行排序的方法
- loadrunner动态从mysql取值
- 201521123103 《Java学习笔记》 第六周学习总结
- uap
- JS之clientX,clientY,screenX,screenY,offsetX,offsetY区别
- [UE4]记录瞬移目标点
- C#实现如何判断一个数组中是否有重复的元素
- Android学习路-Android Studio的工程目录
- Bonding
- 2、extract-text-webpack-plugin提取Sass编译的Css
- Ping ip能ping通,ping计算机名ping不通,网络共享不能访问
- Git 学习(七)标签管理
热门文章
- 自学_数据库<;三>;
- .netcore 中使用开源的AOP框架 AspectCore
- leaflet 实现克里金插值功能(附源码下载)
- rowKey原则
- 趣谈Linux操作系统学习笔记:第二十讲
- vb.net 带有一个参数的线程
- intellij idea从git检出代码并建立工程
- golang和swoole区别
- C# 如何添加自定义键盘处理事件 如何配置app.config ? | csharp key press event tutorial and app.config
- jQuery 源码分析(十三) 数据操作模块 DOM属性 详解