zoukankan      html  css  js  c++  java
  • 爬虫基础知识(玖)

    一、Redis事务及乐观锁

        1、Redis支持简单地事务

        2、Redis与MySQL事务的对比:

     

    MySQL

    Redis

    开启

    start transaction

    multi

    语句

    普通SQL

    普通命令

    失败

    rollback回滚

    discard取消

    成功

    commit

    exec

          Redis的事务,在用multi开启之后,之后输入的所有命令,其实都是将其添加到一个执行队列中,当使用exec这个命令时,这个队列中的命令就会按顺序执行,使用discard这个命令式,这个队列就会被清空。

          rollback与discard作用:

            discard和rollback都可以做到回滚。但是discard其实就是将开启事务后的队列里面的命令清空。rollback是真正的回滚,就是回到开启事务之前的状态。

        3、在multi后面的语句中,语句出错可能有2种情况:

          (1)语法本身就有问题,此时,在输入命令时,就会报错。---直接会回滚。

          (2)语法本身没错,但使用对象有问题。比如zadd操作list对象,这个命令也会被加入队列。exec之后,出错的那个命令之前的命令是会被执行的。

        相当于只要事务的所有命令中出现任何语法错误,在exec时都会回滚,所有命令都不会执行。

        4、乐观锁:

          Redis的事务中,启用的是乐观锁,只负责监测key没有被改动。

          具体的命令-----watch命令  例:watch ticket

    二、消息订阅

        Redis发布订阅是一种消息通信模式:发送者发送消息,订阅者接收消息。

        Redis客户端可以订阅任意数量的频道。

        使用办法:

          订阅端:subscribe 频道名称

          发布端:publish 频道名称 发布内容

                

        消息的意义:建立客户端之间的通信

    三、Redis持久化配置

        Redis启动之后,就从硬盘上将所有数据读出来,加载到内存中。

        持久化:将内存中的数据保存到硬盘上。

        序列化:将对象保存到硬盘上。

        Redis是一个内存数据库,它最大的特点就是可以将内存上的数据持久化到硬盘。这是为了保证数据在系统重启或者电脑电源关闭时,数据不会丢失。

        当Redis启动的时候,会将硬盘的数据全部加载到内存,在内存上运行。

        Redis持久化是通过两种方式来完成的:

          ·RDB快照

          ·AOF日志

       (一)RDB快照

          1、快照的配置选项:

            ·save 900 1        900秒内,有1条写入,则产生快照

            ·save 300 1000       300秒内有1000次写入,则产生快照

            ·save 60 10000       60秒内有10000写入,则产生快照

            这三个选项都屏蔽,则RDB禁用。

          2、和持久化相关的Redis配置:

            ·stop-writes-on-bgsave-error yes // 后台备份进程出错时,主进程停不停止写入?

            ·rdbcompression yes // 导出的rdb文件是否压缩

            ·Rdbchecksum yes // 导入rbd恢复时数据时,要不要检验rdb的完整性

            ·dbfilename dump.rdb //导出来的rdb文件名

            ·dir ./ //rdb的放置路径

          3、RDB快照的过程:

            当触发三个条件其中的一个时,Redis就会进行RDB快照的备份,从照相到将内存镜像保存到dump.rdb文件的过程就是快照的过程。

          4、RDB弊端:

            RDB快照是需要消耗时间的,若在这个过程中触发了快照的条件,但是此时RDB正在进行中,此时的触发就无法正常使用RDB。而正式因为其存在隐患,所以产生了AOF日志。

       (二)AOF日志

          1、AOF其实就是一种日志记录方式来保存数据。

          2、Redis的数据结构都是通过命令来的,也就意味着保存了命令就相当于保存了数据。因为只需将保存的命令执行一遍,就可以将Redis恢复到最后执行命令的状态。因此,AOF日志文件中存储的就是输入的命令,并且是以追加的方式保存的。

          3、AOF的配置:  

    • appendonly no # 是否打开 aof日志功能
    • appendfsync always # 1个命令,都立即同步到aof. 安全,速度慢
    • appendfsync everysec # 折衷方案,每秒写1
    • appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到 aof. 同步频率低,速度快
    • no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof(原因是为了保证RBD和AOF数据的同一性)
    • auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%,重写(重写就是将数据逆化成命令,重新写入AOF的过程,目的是为了不让AOF无限增长)
    • auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M,重写

       (三)两种持久化机制的比较

    RDB持久化 AOF持久化
    全量备份,一次保存整个数据库 增量备份,一次保存一个修改数据库的命令
    保存间隔较长 保存间隔默认为1秒
    数据还原速度快 数据还原速度一般
    更适合数据备份,默认开启 更适合用来保存数据,默认关闭
    启动优先级:低 启动优先级:高
    体积:小 体积:大
    恢复速度:快 恢复速度:慢
    数据安全性:丢数据 数据安全性:根据策略决定

       (四)Redis持久化相关的问题

          1、在dump.rdb过程中,AOF如果停止同步,会不会丢失数据?

            答:不会,所有的操作都会缓存在内存的队列里,dump完成后统一操作。

          2、AOF重写是指什么?

            答:AOF重写是指把内存中的数据,逆化成命令写入到AOF日志里,以解决AOF日志过大的问题。

          3、若rdb文件和aof文件都存在,优先用谁来恢复数据?

            答:这种情况下,当Redis重启时会优先载入aof文件来恢复原始的数据,因为通常情况下aof文件保存的数据要比rdb文件完整。

          4、两种是否可以同时使用?

            答:可以,且推荐这么做。

          5、恢复时RDB和AOF哪个恢复的快?

            答:RDB快,因为其是数据的内存映射,直接载入到内存,而AOF是命令,需要逐条执行。

     

    • ./ //rdb的放置路径
  • 相关阅读:
    2级搭建类203-Oracle 19c SI ASM 静默搭建(OEL7.7)
    2级搭建类EM-Oracle EMCC 13c Release 3 在 OEL 7.7 上的搭建
    1级搭建类112-Oracle 19c SI FS(CentOS 8)
    0级搭建类013-CentOS 8.x 安装
    List添加map,后添加的map覆盖前面的问题
    mysql插入数据报错1366
    oracle ora-12514解决办法
    easyUI 创建详情页dialog
    Server Tomcat v7.0 Server at localhost failed to start.
    maven项目启动报错;class path resource [com/ssm/mapping/] cannot be resolved to URL because it does not exist
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12358779.html
Copyright © 2011-2022 走看看