部门子网站建设领导小组,网站建设是属于什么岗位,网站建站免费空间,wordpress设置文章标题1、持久化机制
Redis的所有数据都保存在内存中#xff0c;如果没有配置持久化功能#xff0c;Redis重启后数据就会全部丢失#xff0c;所以需要开启Redis的持久化功能#xff0c;将数据保存到磁盘上#xff0c;这样当Redis重启后#xff0c;可以从磁盘中恢复数据。Redis…1、持久化机制
Redis的所有数据都保存在内存中如果没有配置持久化功能Redis重启后数据就会全部丢失所以需要开启Redis的持久化功能将数据保存到磁盘上这样当Redis重启后可以从磁盘中恢复数据。Redis提供两种方式进行持久化一种是RDB持久化另一种是AOF持久化。下面详细介绍这两种方式。
1.1、RDB持久化
RDB持久化是指在指定的时间间隔内定时地将内存中的数据写入磁盘把内存中的数据保存到RDB文件中是默认的持久化方式。Redis快照的过程是首先Redis服务器使用fork函数复制一份当前进程父进程的副本子进程。然后父进程继续接收并处理客户端发来的命令而子进程将内存中的数据写入硬盘中的RDB临时文件。最后当子进程写入完所有数据后会用RDB临时文件替换旧的RDB文件如下图所示
1.2、AOF持久化
追加Append Only FileAOF持久化方式会记录Redis客户端对服务器的每一次写操作命令并将这些写操作追加保存到appendonly.aof文件AOF文件中。在Redis服务器重启时会加载并运行AOF文件里的命令以达到恢复数据的目的如下图所示
1.3、配置RDB
Redis的配置文件在Linux下是redis.conf文件在Windows下是redis.windows.conf文件。本小节使用的实验环境是Linux相应的配置文件是redis.conf文件配置效果与Windows下的一致。
1.3.1、RDB文件路径和名称
RDB持久化是Redis默认的持久化方式默认情况下Redis会把快照文件存储在当前目录下一个名为dump.rdb的文件内。
如果需要修改dump.rdb文件的存储路径和名称可以通过修改配置文件redis.conf内的dbfilename参数和dir参数来实现
# RDB文件名默认为dump.rdb
dbfilename dump.rdb # RDB文件和AOF文件存放的目录。默认为当前工作目录
dir /usr/local/redis/bin保存配置文件后使用redis-server命令加载redis.conf配置文件并重新启动Redis服务器然后使用CONFIG GET dir命令查看RDB文件的存储路径
127.0.0.1:6379 CONFIG GET dir
1) dir
2) /usr/local/redis/bin1.3.2、RDB的保存点
修改保存点选项可以配置RDB的启用和禁用。可以通过修改配置文件redis.conf实现该功能。
1设置保存点可以使Redis在每N秒内如果数据发生了M次改变就保存快照文件。例如下面这个保存点配置表示每60s内如果数据发生了10000次以上的改变Redis就会自动保存快照文件
save 60 10000保存点可以设置多个设置保存点的格式如下
save seconds changesRedis可以设置多个保存点例如Redis的配置文件redis.conf就默认设置了3个保存点
save 900 1 # 900s后至少1个key有改变就保存快照文件
save 300 10 # 300s后至少10个key有改变就保存快照文件
save 60 10000 # 60s后至少10000个key有改变就保存快照文件2禁用快照保存。如果想禁用快照保存的功能可以通过注释所有save配置或者在最后一条save配置后添加如下的配置实现
save 1.3.3、错误处理
后台存储发生错误时禁止写入默认值为yes。默认情况下如果Redis在后台生成快照文件时失败就会停止接收数据目的是让用户能知道数据没有持久化成功
stop-writes-on-bgsave-error yes1.3.4、数据压缩
启动RDB文件压缩会耗费CPU资源默认值为yes。如果想节省CPU资源可以禁用压缩功能但是数据集就会比没压缩的时候要大。
rdbcompression yes1.3.5、数据校验
对RDB数据进行校验会耗费CPU资源默认值为yes。
rdbchecksum yes1.3.6、手动生成快照文件
Redis提供了SAVE命令和BGSAVE命令用于手动生成快照文件。
1SAVE。SAVE命令会使用同步的方式生成RDB快照文件将当前Redis实例的所有数据快照Snap Shot以RDB文件的形式保存到硬盘默认情况下会把Redis数据持久化到dump.rdb文件中并且在Redis服务器重启后自动读取dump.rdb文件。SAVE命令在Redis主线程中工作会阻塞其他请求操作在实际的生产环境中应该避免使用。
127.0.0.1:6379 SAVE
OK2BGSAVE。BGSAVE命令使用异步的方式保存当前Redis实例的所有数据快照到RDB文件执行BGSAVE命令后Redis会产生一个子进程并立刻恢复对客户端的服务。
127.0.0.1:6379 BGSAVE
Background saving started
(2.41s)注意Redis配置文件里禁用了快照生成功能不影响SAVE命令和BGSAVE命令的效果。
1.4、配置AOF
1.4.1、启用AOF持久化
将redis.conf配置文件的配置项appendonly设置为yes启用AOF持久化
appendonly yes修改redis.conf配置文件后重启Redis服务器Redis执行的每一条命令都会被记录到appendonly.aof文件中。但事实上Redis并不会立即将命令写入硬盘文件中而是将命令写入硬盘缓存。在接下来的可靠性配置中可以配置从硬盘缓存写入硬盘的时间。
1.4.2、AOF文件路径和名称
通过修改配置文件redis.conf修改dir、appendfilename对应的配置项来修改AOF文件路径和名称
# 文件存放目录与RDB文件共用。默认为当前工作目录
dir /usr/local/redis # 默认文件名为appendonly.aof
appendfilename appendonly.aof1.4.3、可靠性
在redis.conf配置文件中可以通过appendfsync选项指定写入策略有3个选项
always每次收到Redis客户端的写命令就立即强制写入到AOF文件。这是最有保证的持久化方式但也是速度最慢的一般不推荐使用。everysec每秒向AOF文件写入一次Redis客户端的写操作。在性能和持久化方面做了很好的折中是推荐的方式。no由操作系统来决定什么时候写入AOF文件一般为30秒左右一次。这个方式性能最好但是持久化方面没有保证一般不推荐使用。
在redis.conf配置文件中配置appendfsync选项的实例如下
# appendfsync always
appendfsync everysec
# appendfsync no1.4.4、日志重写
随着写操作不断增加AOF文件会越来越大Redis可以在不中断服务的情况下在后台重建AOF文件。
日志重写的工作原理如下
Redis调用fork函数产生一个子进程。子进程把新的AOF文件写到一个临时文件里。父进程持续把新的变动写到内存里的缓冲区buffer同时也会把这些新的变动写到旧的AOF文件里这样即使重写失败也能保证数据的安全。当子进程完成文件的重写后父进程会获得一个信号然后把内存里的缓冲区内容追加到子进程生成的新AOF文件里。
我们可以设置日志重写的条件。下面的实例表示当AOF文件的体积大于64 MB并且AOF文件的体积比上一次重写之后的体积大了至少一倍100%的时候Redis将执行日志重写操作
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64MBRedis会记住自从上一次重写后AOF文件的大小。要禁用自动的日志重写功能可以把百分比设置为0
auto-aof-rewrite-percentage 01.4.5、数据损坏修复
如果因为某些原因例如服务器崩溃AOF文件损坏了导致Redis加载不了可以通过以下方式进行修复
备份AOF文件。使用redis-check-aof命令修复原始的AOF文件redis-check-aof --fix在Linux下可以使用diff-u命令查看AOF文件和RDB文件的差异。使用修复过的AOF文件重启Redis服务器。
1.4.6、从RDB切换到AOF
在Redis 2.2以后的版本中从RDB切换到AOF需要备份一个最新的dump.rdb文件并把备份文件放在一个安全的地方。执行以下命令
$ redis-cli config set appendonly yes
$ redis-cli config set save 要确保数据与切换前一致确保数据正确地写到AOF文件里。
1.4.7、备份
建议的备份方法如下
创建一个定时任务每小时和每天创建一个快照文件并将快照文件保存在不同的文件夹里。定时任务运行时把太旧的文件删除。例如只保留48h内的按小时创建的快照文件和一到两个月的按天创建的快照文件。每天确保一次把快照文件传输到数据中心外的地方进行保存至少不能保存在Redis服务所在的服务器。
2、Redis过期key清除策略
Redis对过期key有3种清除策略
被动清除当读/写一个已经过期的key时会触发惰性清除策略直接清除这个过期key。主动清除由于惰性清除策略无法保证冷数据被及时清除因此Redis会定期主动清除一批已过期的key。当前已用内存超过maxmemory限定时触发主动清除策略。
这里着重介绍第3种清除策略。在Redis中允许用户设置最大使用内存大小为maxmemory需要配合maxmemory-policy使用设置为0表示不限制。当Redis内存数据集快到达maxmemory时Redis会实行数据淘汰策略。Redis提供6种数据淘汰策略如小表所示 关于maxmemory设置可以通过在redis.conf配置文件中的maxmemory参数设置或者通过命令CONFIG SET动态修改。关于数据淘汰策略的设置可以通过在redis.conf配置文件中的maxmemory-policy参数设置或者通过命令CONFIG SET动态修改
127.0.0.1:6379 CONFIG GET maxmemory
1) maxmemory
2) 0
127.0.0.1:6379 CONFIG SET maxmemory 100MB
OK
127.0.0.1:6379 CONFIG GET maxmemory
1) maxmemory
2) 104857600