一、Redis事务及乐观锁1、Redis支持简单地事务 2、Redis与MySQL事务的对比:
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的配置:
(三)两种持久化机制的比较
(四)Redis持久化相关的问题 1、在dump.rdb过程中,AOF如果停止同步,会不会丢失数据? 答:不会,所有的操作都会缓存在内存的队列里,dump完成后统一操作。 2、AOF重写是指什么? 答:AOF重写是指把内存中的数据,逆化成命令写入到AOF日志里,以解决AOF日志过大的问题。 3、若rdb文件和aof文件都存在,优先用谁来恢复数据? 答:这种情况下,当Redis重启时会优先载入aof文件来恢复原始的数据,因为通常情况下aof文件保存的数据要比rdb文件完整。 4、两种是否可以同时使用? 答:可以,且推荐这么做。 5、恢复时RDB和AOF哪个恢复的快? 答:RDB快,因为其是数据的内存映射,直接载入到内存,而AOF是命令,需要逐条执行。
|
|