一. 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 ""