redis 持久化有2种方式,定时快照与append only
1. 定时快照实现方式:
在上一篇启动流程中提到过,redis启动后有一个定时任务serverCron 每100毫秒执行一次,定时快照就是 在这个任务中执行的,代码如下:
time_t now = time(NULL);
for (j = 0; j < server.saveparamslen; j++) {
struct saveparam *sp = server.saveparams+j;
if (server.dirty >= sp->changes && now-server.lastsave > sp->seconds) {
rdbSaveBackground(server.dbfilename);
break;
}
}
saveparam实际对应的就是配置文件中的save指令,对应时间和改变次数
save 900 1
save 300 10
save 60 10000
对应结构体定义:
struct saveparam {
time_t seconds;
int changes;
}
server.dirty保存的是上一次持久化后,新产生的变化数量
可以看到只要配置中的任何一个save指令生效:即超过给定时间且发生了给定的changes,则进行持久化
再看下rdbSaveBackground函数实现:
if ((childpid = fork()) == 0) {
//child
rdbSave(filename);
...
} else {
//parent
server.bgsavechildpid = childpid;
...
}
也就是说所说的后台快照进程实际是由主进程fork出来的子进程完成的,由于fork子进程使用的是copy on write机制,所以子进程可以读取主进程当前的内存空间进行dump工作
对于子进程rdbSave实际就是把快照内存的所有db的dict数据结构遍历,然后依次写入一个叫
temp-<child_pid>.rdb的文件中,写完后,rename替换现有rdb文件
对于主进程要保存快照子进程的pid,之后通过wait系统调用获得子进程退出事件
主进程在获得快照子进程结束信息后,会调用一个backgroundSaveDoneHandler()函数
清除一些标志变量和临时dump文件 temp-<child_pid>.rdb
backgroundSaveDoneHandler最后还要做一件很重要的事,调用updateSlavesWaitingBgsave()
实际作用和redis的复制相关,回头来叙述这个
2. append only方式
这种方式实际是任何写入操作都会进行持久化,类似于mysql的binlog方式,优缺点大家可以自己理解了
从代码上可以看到,实际reids接受到client的消息包,解析完后,会查找一个叫cmdTable的结构体数组, 里面存放,对应命令的回调函数,这段代码实际参考call()函数
static void call(redisClient *c, struct redisCommand *cmd) {
long long dirty;
dirty = server.dirty;
cmd->proc(c);
dirty = server.dirty-dirty;
if (server.appendonly && dirty)
feedAppendOnlyFile(cmd,c->db->id,c->argv,c->argc);
...
}
cmd->proc实际是调用客户端发来命令对应的回调函数,之后根据命令类型重新赋值dirty,只要有新的 changes就append到aof文件中
当然redis还提供一些命令可以手工对redis进程持久化操作,比如aof文件过大,可以手工发送rewrite给 服务器
另外需要说明的是:redis的replication实际依赖的是第一种方式,内存快照来实现复制功能的,后续详 细说明
结论:
1. 内存快照持久化方式,dump数据时不影响redis服务其它的request,但重启会丢失部分数据
2. aof方式保证不会丢失数据,但同样应该会损失部分性能,不过append only这种方式因为一直是顺序 写入,所以影响应该不是很大
具体选用哪一个还需要根据业务场景选择
相关推荐
对于大型 Redis 集群,可能需要将 `redis-full-check` 结合自动化工具(如 Ansible 或 Jenkins)一起使用,定期执行检查并生成报告。 在维护 Redis 系统的过程中,了解并熟练使用 `redis-full-check` 这样的工具至...
5. **redis-check-dump.exe**:这是一个检查RDB持久化文件(dump.rdb)完整性的工具。RDB是Redis的一种持久化方式,它定期将内存中的数据快照保存到磁盘,以便在服务器重启或故障时恢复数据。 6. **redis-check-aof...
2. **服务化**:为了使Redis在系统启动时自动运行,可以将`redis-server.exe`配置为Windows服务。这可以通过命令行工具`sc create`或使用`.msi`安装包实现。 3. **数据持久化**:Redis支持多种持久化方式,包括RDB...
3. **数据持久化**:Redis-Py-Cluster支持Redis的数据持久化选项,如RDB快照和AOF日志,以保证数据在系统故障后的恢复。 4. **故障检测与恢复**:库内建了监控机制,可以检测到节点故障,并自动重定向请求到其他...
《深入理解Tomcat-Redis-Session-Manager:在Tomcat7和Tomcat8中的应用》 在现代Web应用程序开发中,session管理是一个至关重要的环节,它涉及到用户会话的持久化和跨请求的数据共享。传统的session管理方式在高...
Redis作为一种高性能、易用且具备持久化功能的键值存储系统,在众多应用场景中脱颖而出。本文将深入探讨Redis性能监控中的五个最重要的指标:内存使用量、命令处理数量、延迟、碎片率以及驱逐策略,并解释如何利用...
tomcat-redis-session-manager是专门为Tomcat设计的一个插件,它实现了SessionManager接口,允许Tomcat将session数据序列化并存储到Redis中。这样,无论用户连接到哪个Tomcat实例,都可以从Redis中获取其session信息...
这个名为"Redis-x64-5.0.14.1"的压缩包是Redis针对Windows操作系统的64位版本,版本号为5.0.14.1。在Windows上运行Redis可能与Linux环境有所不同,但仍然提供了相同的核心功能。 1. **Redis的特性**: - **内存...
2. 持久化:为了防止数据丢失,Redis提供了RDB(定期持久化)和AOF(Append Only File)两种持久化策略。RDB会在指定时间间隔保存数据集的快照,AOF记录所有写操作日志,通过回放日志恢复数据。 3. 主从复制:Redis...
1. 下载源码包:`redis-2.8.13.tar.gz` 是Redis的源码包,解压后进行编译和安装。 2. 解压:`tar -zxvf redis-2.8.13.tar.gz` 3. 编译:`cd redis-2.8.13`,然后`make` 4. 安装:`sudo make install` 5. 启动Redis...
综上所述,Redis作为一个强大的键值存储系统,其丰富的数据类型、高效的数据操作以及灵活的持久化和复制机制,使其在众多场景下成为首选。正确理解和使用Redis-x64-5.0.14.1版本,能够显著提升应用的性能和可扩展性...
- 解压"redis-windows-7.2.4.zip",找到`redis-server.exe`启动文件。 - 运行`redis-server.exe`,默认情况下,Redis监听6379端口。 - 可以通过配置文件`redis.windows.conf`修改默认设置,如端口、内存限制、...
标题中的"tomcat-redis-session-manager-1.2-tomcat-7-java-7"表明这是一个针对Tomcat服务器,用于管理session的组件,版本为1.2,适配Tomcat 7和Java 7环境。这个组件的主要作用是将Tomcat的会话管理功能与Redis...
Redis的核心组件包括`redis-server.exe`(服务器进程)、`redis-cli.exe`(命令行客户端)以及`redis-benchmark.exe`(性能测试工具)等。用户需要通过`redis-server.exe`启动服务,并通过`redis-cli.exe`进行交互式...
- **redis-check-aof.exe**:用于检查和修复AOF持久化文件的工具。 3. **在Windows上部署Redis**: - 安装服务:使用`redis.windows-service.conf`配置文件创建Redis服务,通过命令行工具`sc create`或使用`redis...
4. **安装与配置**:解压后,用户需要将`redis-server.exe`作为服务启动,可以通过`redis.windows.conf`配置文件进行定制化设置,如端口号、日志文件位置、数据持久化策略等。 5. **命令行客户端**:压缩包可能还...
6. **持久化机制**:Redis提供了两种持久化方式,RDB(快照)和AOF(Append Only File)。RDB会在指定时间间隔或者满足一定条件时保存当前数据库状态;AOF则记录每次写操作,当服务器重启时,通过重放这些操作来恢复...
1. **高可用性**:Redis具有主从复制和持久化机制,即使主服务器故障,也能通过从服务器接管,保证服务的连续性。 2. **高性能**:Redis是内存数据库,读写速度极快,对于频繁读取和更新的Session数据,性能显著优于...
4. **持久化改进**:RDB和AOF两种持久化方式都得到了改进,提供了更好的数据一致性保障和更快的恢复速度。 5. **复制优化**:主从复制功能更加强大,支持批量复制和部分复制,减少了网络传输的数据量,提升了效率。...
`tomcat-redis-session-manager`就是这样一款解决方案,它将Tomcat的session管理与Redis相结合,实现了跨服务器的session共享。 首先,让我们理解`tomcat-redis-session-manager`的核心概念。这是一个开源项目,它...