爬虫基础知识(玖)

一、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是命令,需要逐条执行。

posted @ 2020-02-24 21:00  如心幻雨  阅读(171)  评论(0编辑  收藏  举报