一. RDB 快照持久化 (默认)
- rdb机制,在满足redis.conf中配置的持久化策略后, 自动持久化数据, 默认存储在dump.rdb文件中
- 策略 :
save 900 1 : 900秒内,一个key更改就持久化
save 300 10 : 300 秒内, 10 个key更改就持久化
save 60 10000:
- rdb过程:
redis调用fork函数, 拷贝当前redis进程的作为子进程, 改子进程把内存中的数据写成文件, 然后替换旧的dump.rdb
- 手动触发rdb快照 :
(1) save : 让当前redis进程进行快照操作, 会阻塞其他请求
(2) bgsave ; 用fork后的子进程进行快照操作
- redis-check-dump : 修复dump.rdb文件
- rdb方式的缺点 :
如果一次rdb后发生数据修改,但还未触发下一次rdb持久化时就宕机, 则会丢失这期间发生改变的数据
二. AOF日志文件持久化
- redis默认不开启AOF持久化, 需要修改appendonly yes开启备份
- 如果同时开启了rdb与aof持久化, 则只会触发aof持久化
- AOF默认每秒执行一次日志记录, 保存到appendonly.aof文件中, 该文件可以直接查看
- AOF的执行策略 :
(1)appendfsync always 每次都会执行
(2)appendfsync everysec 默认 每秒执行一次同步操作(推荐,默认)
(3)appendfsync no不主动进行同步,由操作系统来做,30秒一次
- aof日志文件重写
aof文件有自己的重写策略, 因为aof只是记录了每次的操作命令, 如果不进行重写, 这个文件的大小会随着操作次数的增加而变得非常庞大, 也不利于恢复数据,所以要定期重写该文件
(1)重写流程 : aof自动生成set命令等插入命令, 来描述当前内存中的数据内容, 这些命令覆盖原来的aof文件
(2)重写策略 :
(a) auto-aof-rewrite-percentage 100 : 当目前aof文件大小超过上一次重写时的aof文件大小的百分之多少时会再次进行重写,如果之前没有重写,则以启动时的aof文件大小为依据
(b)auto-aof-rewrite-min-size 64mb : 文件增加到64m后重写
(c)手动执行bgrewriteaof进行重写
[注]:所谓的“重写”其实是一个有歧义的词语, 实际上, AOF 重写并不需要对原有的 AOF 文件进行任何写入和读取, 它针对的是数据库中键的当前值。
三. 动态切换redis持久方式
- CONFIG SET appendonly yes : 从RDB切换到AOF
- CONFIG SET save ""(可选)
[注]:如果想把正在运行的redis数据库,从RDB切换到AOF,建议先使用动态切换方式,再修改配置文件,重启数据库。(不能自己修改配置文件,重启数据库,否则数据库中数据就为空了。)
四. config命令
- 使用config set可以动态设置参数信息,但在服务器重启之后就失效了。
config set appendonly yes
config set save "90 1 30 10 60 100"
- 使用config get可以查看所有可以使用config set命令设置的参数
config get * : 获取所有设置的参数值
- config rewrite命令对启动 Redis 服务器时所指定的 redis.conf 文件进行改写(Redis 2.8 及以上版本才可以使用),主要是把使用config set动态指定的命令保存到配置文件中。
[注]:config rewrite命令对 redis.conf 文件的重写是原子性的, 并且是一致的: 如果重写出错或重写期间服务器崩溃, 那么重写失败, 原有 redis.conf 文件不会被修改。 如果重写成功, 那么 redis.conf 文件为重写后的新文件。
五.安全认证
- 设置数据库密码 (密码认证)
(1)修改配置requirepass password
(2)验证密码auth password
(3)jedis.auth(String passed) 在链接时进行验证
- bind参数(可以让数据库只能在指定IP下访问)(主机认证)
bind 127.0.0.1
- 重命名命令,防止意外的flushall输入
(1)修改命令的名称 : rename-command flushall cleanall
(2)禁用命令 : rename-command flushall ""