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)