事务的定义:
Redis中的事务是指一组命令的集合,这些命令可以在一个原子操作中执行。在Redis中,可以使用MULTI命令开始一个事务,然后使用EXEC命令来执行事务中的所有命令,或者使用DISCARD命令来取消事务。事务可以确保在执行期间不会被其他客户端的命令中断,并且可以保证事务中的所有命令要么全部执行成功,要么全部失败。事务在Redis中通常用于执行一系列相关的命令,以确保这些命令要么全部成功,要么全部失败。
Redis中的事务主要是通过MULTI和EXEC这两个命令来实现的。MULTI用于开启一个事务,事务开启之后,所有的命令都会被放到一个队列中,最后通过一个EXEC命名来执行事务中的所有命令。
Redis中的事务没有原子性,并不能保证所有的命令都会执行成功。
上图使用 MULTI开启事务,返回OK代表开启事务成功。上图中的(TX)就表示事务开始中,然后设置两个键值对,这里返回QUEUED而不返回OK,表示我们的命令已经被放到了队列中。
这时打开一个终端获取键值,发现为空,这时因为事务还未执行。
通过EXEC命令来执行事务。
在执行事务后,再次获取键值,就可以获取到了。
事务中的命令出现错误,并不会影响后面命令的执行。这里开启事务后让这三个键自增,由于k4是一个字符类型并不能解析为整数,所有就会出现错误。
观察上图获取到的值,发现Redis事务中命令出现错误并不会影响到正确命令的执行。
持久化的定义:
在Redis中,持久化是指将数据存储在磁盘上,以便在Redis重启时可以恢复数据。Redis支持两种主要的持久化方式:
1. RDB(Redis DataBase)持久化:RDB持久化通过将Redis在内存中的数据快照写入磁盘来实现持久化。管理员可以配置Redis定期将数据快照写入磁盘,以便在Redis重启时恢复数据。RDB持久化适合于对数据一致性要求不是非常高的场景。
2. AOF(Append-Only File)持久化:AOF持久化通过将Redis接收到的写命令追加到一个日志文件中来实现持久化。当Redis重启时,它会重新执行这些写命令来恢复数据。AOF持久化通常比RDB持久化更加安全,因为它可以提供更好的数据一致性保证。
持久化使得Redis可以在重启后恢复数据,从而避免了数据丢失的风险。管理员可以根据实际需求选择合适的持久化方式,并根据需要对持久化参数进行调优。
持久化是Redis中一个基于内存的数据库,如果没有持久化,那么一旦服务器重启或者断电,那么之前的所有数据都会丢失。这对于一个数据库是非常致命的。
第一种方式(RDB) 是某一个时间点上数据的完整副本,可以通过配置文件中的save参数来配置。
第一个参数表示秒数,第二个参数表示修改次数。
有上图三种默认配置。
第一种解释为:3600s之内有一次修改就进行一次快照。其他同理。
除了使用配置文件来自动触发快照之外, 还可以使用save命令手工触发快照
上图的dump.conf就是生成的快照文件。
快照文件的缺点:
如果服务器在快照之后宕机了,那么最后一次快照之后的所有修改内容都会丢失掉。
考虑到快照文件的缺点,所有RDB适合更适合用来做备份。
还有一个问题:由于生产环境中我们为Redis开辟的内存区域一般都比较大,那么内存中的数据同步到硬盘这个过程就会持续比较长的时间,这段时间内Redis都处于一个阻塞的状态,不能接收任何请求。
所以为了应对这种情况,Redis提供了叫做bgsave的命令,这个命令会单独创建一个子进程,来负责将内存中的数据写入到硬盘中,这样的话主进程就可以继续处理请求了。但是这个过程中还会有一定的性能损耗,因为fork一个子进程也是需要时间的,这段时间内Redis还是不能处理任何请求。没有办法做到秒级的快照。
为了解决这种问题Redis又提供了另一种叫AOF的持久化方式。他的原理是在执行写命令的时候,不仅会将命令写到内存中还会将命令写入到一个追加的文件中,这个文件就是AOF。他会以日志的形式来记录每一个写操作。当Redis重启的时候就会通过重新执行AOF文件中的命令来在内存中重建整个数据库的内容。
开启AOF的方式只需要在AOF的配置文件中将appendonly后面的no修改为yes就好了然后保存退出配置文件就好。
进入配置文件的命令为:
vi redis.conf
然后输入/append,就可查看append的配置文件了,前面的查看save配置文件同理。