• Redis(事务和持久化)(很重要!)


    事务的定义:

    Redis中的事务是指一组命令的集合,这些命令可以在一个原子操作中执行。在Redis中,可以使用MULTI命令开始一个事务,然后使用EXEC命令来执行事务中的所有命令,或者使用DISCARD命令来取消事务。事务可以确保在执行期间不会被其他客户端的命令中断,并且可以保证事务中的所有命令要么全部执行成功,要么全部失败。事务在Redis中通常用于执行一系列相关的命令,以确保这些命令要么全部成功,要么全部失败。

    Redis中的事务主要是通过MULTIEXEC这两个命令来实现的。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配置文件同理。 

  • 相关阅读:
    14 WEB漏洞:SQL注入之类型及提交注入
    分页&日志
    软件设计原则-依赖倒置原则讲解以及代码示例
    Luancher和unityLibrary都有build.gradle有什么不同
    图像处理方面的笔试面试题目及回答总结整理1~20
    分库分表解决300亿记录存储的三个方案方法
    [附源码]计算机毕业设计springboot室内设计类网站
    AT&T 格式汇编语言语法
    Qt/C++音视频开发52-采集本地屏幕桌面的终极设计
    【Flutter】包管理(9)Flutter cached_network_image 解决网络图片加载和缓存问题的终极指南
  • 原文地址:https://blog.csdn.net/qq_73185160/article/details/134531976