《Redis6开发与实战PPT课件(共11章)第5章 Redis缓存持久化》由会员分享,可在线阅读,更多相关《Redis6开发与实战PPT课件(共11章)第5章 Redis缓存持久化(19页珍藏版)》请在金锄头文库上搜索。
1、第二章 Redis常用数据类型及命令大数据教材Redis 6开发与实战青椒小助手第5章Redis的持久化第1章初始Redis 第2章Redis常用数据类型第3章Redis常用命令第4章Redis高级主题 第5章Redis缓存的持久化第6章Redis集群环境部署第7章Redis开发与实战第8章Spring Boot与Redis整合应用第9章Redis监控第10章Redis的缓存设计与优化内容导航:5.1 持久化机制5.2 Redis过期Key清除策略第5章 Redis缓存持久化主讲:* 主审: *4持久化机制Redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在在指定的时间间
2、隔内将存中的数据库数据集快照写入磁盘),另外一种是AOF(append only file)追加持久化(原理是将Reids的操作日志以追加的方式写入文件)。下面详细介绍这两种方式。5持久化机制RDB持久化,该方式是指在指定的时间间隔内定时的将内存中的数据集快照写入磁盘,把内存中的数据保存到RDB文件中,是默认的持久化方式。 Redis快照的过程是,首先Redis Server(服务器)使用fork函数复制一份当前进程(父进程)的副本(子进程)。其次,父进程继续接收并处理客户端发来的命令,而子进程将内存中的数据写入硬盘中的临时文件。最后,当子进程写入完所有数据后会将RDB临时文件替换旧的RDB文
3、件。RDB持久化6持久化机制AOF持久化,追加持久化方式(Append Only File),AOF持久化方式会记录Redis客户端对服务器的每一次写操作命令,并将这些写操作追加保存到appendonly.aof文件中,在Redis服务器重启时,会加载并运行AOF文件里的命令,以达到恢复数据的目的。AOF持久化7配置RDBRedis的配置文件在Linux平台是redis.conf文件,Windows系统下是 redis.windows.conf。1,RDB文件路径和名称RDB持久化是默认的持久化方式,默认情况下Redis会把快照文件存储在当前目录下一个名为dump.rdb的文件内。如果需要修改
4、文件的存储路径和名称,可以通过修改配置文件redis. conf来实现,需要修改dump.rdb文件内的dbfilename参数和dir参数。# RDB文件名,默认为dump.rdb。dbfilename dump.rdb# RDB和AOF文件存放的目录。默认为当前的工作目录dir /usr/local/redis/bin8保存配置文件后,使用redis-server 加载redis.conf配置文件启动。使用CONFIG GET dir命令可以查看RDB文件的存储路径。127.0.0.1:6379 CONFIG GET dir1) dir2) /usr/local/redis/bin配置RD
5、B9配置RDBRDB的保存点1)配置保存点,可以使Redis在每N秒后,如果数据发生了M次改变就保存快照文件。例如下面这个保存点配置表示每60秒内,如果数据发生了10000次以上的变动,Redis就会自动保存快照文件。保存点可以设置多个,设置保存点的格式为Redis可以设置多个保存点,例如Redis的配置文件(redis.conf)就默认设置了三个保存点2)禁用快照保存,如果想禁用快照保存的功能,可以通过注释掉所有save配置,或者在最后一条save配置后添加如下的配置。10配置RDBRDB的保存点3)错误处理后台存储发生错误时禁止写入,默认为yes。默认情况下,如果Redis在后台生成快照时
6、候失败,那么就会停止接收数据,目的是让用户能知道数据没有持久化成功。4)数据压缩启动rdb文件压缩,耗费CPU资源,默认为yes。对rdb数据进行校验,耗费CPU资源,默认为yes。默认Redis会采用LZF对数据进行压缩。如果想节省点CPU的性能,可以禁用压缩功能,但是数据集就会比没压缩的时候要大。5)数据校验对rdb数据进行校验,会耗费CPU资源,默认为yes。11配置RDBRDB的保存点6)手动生成快照Redis提供了SAVE命令和BGSAVE命令用于手动生成快照。 1)SAVE SAVE命令会使用同步的方式生成RDB快照文件,将当前Redis实例的所有数据快照(snap shot)以R
7、DB文件的形式保存到硬盘,默认情况下会把Redis数据持久化到dump.rdb文件中,并且在Redis重启后自动读取dump.rdb文件。SAVE操作在Redis主线程中工作,会阻塞其他请求操作,在实际的生产环境中应该避免使用。2)BGSAVEBGSAVE命令使用异步的方式保存当前Redis实例的所有数据到RDB文件,调用BGSAVE命令后,Redis会产生一个子进程进行处理并立刻恢复对客户端的服务。12配置AOF1) 启用AOF 将redis.conf配置文件的配置项appendonly设为yes,开启AOF持久化。修改redis.conf配置文件后,重启Redis服务器,Redis执行的每
8、一条指令都会被记录到appendonly.aof文件中,但事实上,并不会理解将命令写入到硬盘文件中,而是写入到硬盘缓存。在接下来的可靠性配置中,可以配置多久从硬盘缓存中写入到硬盘中。2) AOF文件路径和名称通过修改配置文件redis.conf实现,修改dir, appendfilename对应的配置项来修改AOF文件路径和名称13配置AOF3) 可靠性 在redis.conf配置文件中可以通过appendfsync选项指定写入策略,有三个选项:1. always,每次收到Redis客户端的写命令就立即强制写入到AOF文件,是最有保证的持久化方式,但是速度也是最慢的,一般不推荐使用。2. ev
9、erysec,Redis客户端的写操作每秒写入AOF文件一次。在性能和持久化方面做了很好的折中,是受推荐的方式。3. no,由操作系统来处理什么时候写入AOF文件,一般为30秒左右一次。这个方式性能最好但是持久化方面没有保证,一般不推荐使用。在redis.conf配置文件中appendfsync选项的相关配置如下:14配置AOF4) 日志重写 随着写操作的不断增加,AOF文件会越来越大,Redis可以在不中断服务的情况下在后台重建AOF文件:日志重写的工作原理如下:1. Redis调用fork()函数,产生一个子进程。2. 子进程把新的AOF文件写到一个临时文件里。3. 主进程持续把新的变动写
10、到内存里的buffer(缓冲区),同时也会把这些新的变动写到旧的AOF文件里,这样即使重写失败也能保证数据的安全。4. 当子进程完成文件的重写后,主进程会获得一个信号,然后把内存里的buffer(缓冲区)追加到子进程生成的那个新AOF文件里。我们可以通过配置设置日志重写的条件,表示当AOF文件的体积大于64 MB,并且AOF文件的体积比上一次重写之后的体积大了至少一倍(100%)的时候,Redis将执行日志重写操作 Redis会记住自从上一次重写后AOF文件的大小。要禁用自动的日志重写功能,可以把百分比设置为015配置AOF5) 数据损坏修复 如果因为某些原因(例如服务器崩溃)AOF文件损坏了
11、,导致Redis加载不了,可以通过以下方式进行修复1. 备份AOF文件。2. 使用redis-check-aof命令修复原始的AOF文件:1. 在Linux系统下可以使用diff -u命令看下两个文件的差异。2. 使用修复过的AOF文件重启Redis服务。16配置AOF6) 从RDB切换到AOF 在Redis 2.2以后的版本,从RDB切换到AOF,需要备份一个最新的dump.rdb的文件,并把备份文件放在一个安全的地方。运行以下两条命令:要确保数据跟切换前一致。确保数据正确的写到AOF文件里7) 备份建议的备份方法:1. 创建一个定时任务,每小时和每天创建一个快照,保存在不同的文件夹里。2.
12、 定时任务运行时,把太旧的文件进行删除。例如只保留48小时内的按小时创建的快照和一到两个月的按天创建的快照。3. 每天确保一次把快照文件传输到数据中心外的地方进行保存,至少不能保存在Redis服务所在的服务器。1. 内容导航:5.1 持久化机制5.2 Redis过期Key清除策略第5章 Redis缓存持久化主讲:* 主审: *18Redis过期Key清除策略Redis对于过期键有三种清除策略: 1) 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key。2) 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key。3
13、) 当前已用内存超过maxmemory限定时,触发主动清理策略。这里着重介绍第三种清除策略,在Redis中,允许用户设置最大使用内存大小maxmemory(需要配合maxmemory-policy使用),设置为0表示不限制;当Redis内存数据集快到达maxmemory时,Redis会实行数据淘汰策略。Redis提供6种数据淘汰策略(maxmemory-policy)。volatile-lru从已设置过期时间的数据集中,挑选最近最少使用的数据淘汰。volatile-ttl从已设置过期时间的数据集中,挑选即将过期的数据淘汰。volatile-random从已设置过期时间的数据集中,随机挑选数据淘汰。allkeys-lru从所有的数据集中,挑选最近最少使用的数据淘汰。allkeys-random从所有的数据集中,随机挑选数据淘汰。no-enviction禁止淘汰数据,这是默认淘汰策略。maxmemory-policy提供的6种淘汰策略:19Redis过期Key清除策略关于maxmemory设置,通过在redis.conf中maxmemory参数设置,或者通过命令CONFIG SET动态修改。关于数据淘汰策略的设置,也可以通过在redis.conf中的maxmemory-policy参数设置,或者通过命令CONFIG SET动态修改。