1. 数据持久化
Redis 是一个缓存工具,也叫做NoSQL数据库,既然都是数据库,必然支持数据的持久化操作。
在Redis中,数据持久化一共有两种方案:
- 快照的方式
- AOF日志
快照
1. 原理:
Redis使用操作系统的多线程机制来实现快照的持久化,Reids在持久化时 会调用Glibc函数 fork一个子进程,然后将快照的持久化操作完成全交给子进程,则父进程则继续处理客户端请求,在这个过程中,子进程能够看到的内存中的数据在子进程产生的一瞬间就固定下来了。再也不会改变,这就是Redis持久化叫做"快照" 类似于虚机中的快照。
2.具体配置
在Redis 中 默认的情况下,快照持久化操作方式是开启的
dump.rdb 这个文件就是备份下来的文件,当Redis启动的时候会自动加载rdb文件
具体的配置在redis.conf中:
快照保存频率
快照频率
# 表示快照频率, 第一个表示 900s 内如果有一个 键 被修改 则进行快照
save 900 1
save 300 10
save 60 10000
出错保存机制
快照文件压缩
生成的快照的文件名
快照文件生成的目录 根目录
3.备份流程
- 在Redis运行过程中,我们可以向Redis发送一条 save命令来创建快照。ps: save是一个阻塞命令,在Redis在收到save命令开始处理备份操作之后,在处理完成之前,将不会再处理其他请求,其他命令会被挂起,所以save命令 使用的不多
- 我们一般可以使用bgsave,bgsave会fork 一个子进程处理备份的事情,不影响父进程处理客户端的请求
- 我们定义的备份规则,如果有规则满足,也会出发bgsave。
- 另外,当我们执行 shutdown命令 也会出发 save 命令,备份工作完成之后,Redis才会关闭。
- 用Redis搭建主从复制时,在我们从机上连接上主机之后,会自动发送一条sync 同步命令,主机收到命令之后首先执行 bgsave 对数据进行快照,然后我们才会给从机发送快照数据进行数据同步。
AOF
备份命令 手动 :
BBREWRITRAOF
与快照持久化不同,AOF持久化时将被执行的命令追加到AOF文件末尾,在恢复时,只需要把记录下来的命令从头到尾执行一遍即可。
默认情况下,AOF持久化时没有开启的,我们需要手动开启:
是否开启
AOF 备份的文件名
备份的频率(时机) 默认每s备份一次
压缩过程中 是否进行数据同步
重写
- 100: 表示当前的aof 文件大小超过上一次冲洗的aof文件大小的百分之多少的时候 再次进行重写?
-
64mb: 如果之前没有重写过,则以重启的aof 大小为依据,同时要求aof文件至少大于64M
1.Redis事务
在关系型数据库中,和事务相关的三个指令分别是:
- begin(开启事务)
- commit (提交事务)
- rollback(事务回滚)
在Redis中 也有相对应的指定: - multi(开启)
- exec(提交)
- discard(回滚)
原子性
ps: Redis中的事务并不能算作原子性。仅仅具备隔离性,也就是说 当前的事务可以不被其他事物打断。
由于每一次事务操作涉及的指令还是挺多的,为了提高执行效率偶尔们可以在使用客户端的时候 通过piplince 来优化指令
Redis 中还有一个 watch 指令,watch 可以用来监控一个key,通过这种监控我们可以确保在exec之前,watch的键没有被修改过。
操作如下: