redis学习03Redis的持久化机制

1、Redis的事务

Redis的事务:以次事务,该成功的成功,该失败的失败。

开启事务,执行一系列命令,但是不会立即执行,会被放在一个队列中。

如果执行事务,那么这个队列中的命令全部执行。

如果取消了事务,则队列中的命令全部作废。

事务的相关命令:

使用redis-cli连接到服务端后

#开启事务
multi

#执行事务
exec

取消事务
discard

执行事务或者取消事务后,需要重新开启事务进行下一个事务操作。

一般配合watch命令使用。在没有调用multi之前(未开启事务),先使用watch命令监听一些key

watch name myname
multi
set name lisi

在进行exec之前,有其他的客户端修改了key为name的值,则开启事务的客户端在提交事务的时候,会自动被取消。

此时watch会被自动去除,不需要再手动调用unwatch命令。

这种机制类似于CAS乐观锁。

2、RDB持久化机制

RDB:Redis DataBase

在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。

优点:

1.整个Redis数据库将只包含一个文件dump.rdb,方便持久化。

2.容灾性好,方便备份。

3.性能最大化,fork子进程来完成写操作,让主进程继续处理命令,保证了Redis的高性能。

4.相对于数据集大时,比AOF的启动效率更高。

rdb是Redis默认的持久化机制,它速度比较快,存储的是一个二进制文件,占用空间小,方便传输。

缺点:

1.数据安全性低,RDB是间隔一段时间进行持久化,如果持久化之间Redis发生故障,回发生数据丢失。无法保证数据的绝对安全。

2.由于RDB是通过fork子线程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至1秒。

#rdb持久化配置

#1代表rdb执行的时机
#900秒内有1个key改变就执行持久化
save 900 1
save 300 10
save 60 10000

#开启rdb持久化压缩
rdbcompression yes

#rdb持久化的文件
dbfilename dump.rdb

3、AOF持久化机制

AOF:append only file

以日志的形式记录服务器所处的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

优点:

1.数据安全,Redis中提供了3种同步策略。

每秒同步是异步的,效果也非常高,所差的是一旦系统宕机,那么这一秒之内的修改数据会丢失。

而每次修改同步,可以视为同步操作,即每次发生数据变化都会记录下来。

2.通过append模式写文件,即使中途服务器宕机也不会破坏已经存在的内容,可以通过redis-chek-aof工具解决数据一致性问题。

3.AOF机制的rewrite模式,定期对AOF文件进行重写,以达到压缩的目的。

缺点:

1.AOF文件比RDB文件大,且恢复速度慢。

2.数据集大的时候,比RDB启动效率低。

3.运行效率没有RDB高。

#默认不开启aof
#appendonly no
appendonly yes

#aof文件名称
appendfilename "appendonly.aof"

#aof持久化时机,以下三个只能开启一种

# appendfsync always #每执行一个写操作,立即持久化。最安全但性能最低。
appendfsync everysec #每秒执行一次。
# appendfsync no #根据操作系统和环境,在一定时间内自动持久化。

aof持久化机制默认是关闭的,推荐同时开启rdb和aof,避免数据丢失。

同时开启aof和rdb的注意事项:

1. redies优先加载aof持久化文件。

2. 如果先开启了rdb,再开启aof,如果rdb执行了持久化,那么rdb文件中的内容会被aof覆盖。(redis更相信aof)

原文地址:https://www.cnblogs.com/asenyang/p/15492489.html