Redis---常见重点知识1(事务持久化机制发布订阅)

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis---常见重点知识1(事务持久化机制发布订阅)相关的知识,希望对你有一定的参考价值。

前言

关于Redis常用命令可见:Redis基本命令
本文来自视频+自己理解归纳:https://www.bilibili.com/video/BV1S54y1R7SB?p=30

一、Redis事务

Redis事务如下,multi开启事务,然后输入多条命令,命令不会马上执行,会放入一个队列中,然后等到执行exec命令,会将队列中的全部命令一起按照输入顺序执行

如果大家还没配这个环境,又想实操一下,那么推荐一个超好用的在线实操Redis的环境

DISCARD 命令取消一个事务,它会清空事务队列中保存的所有命令

WATCH 命令用于监听指定的键(key),当调用 EXEC 命令执行事务时,如果一个被 WATCH 命令监视的键被修改的话,整个事务都不会执行,直接返回失败(null)。(这个命令在Try Redis中执行不出来,要在自己配好的虚拟机Linux环境测试)

1、multi 多条命令 exec	# 开启事务与执行事务
2、discard	# 清空队列中的命令
3、watch		# 监听指定key

二、Redis持久化机制

Redis不用担心内存中的数据丢失(断电),因为他有持久化机制,将这些数据持久化到硬盘中。有两种持久化机制:RDBAOF,主要是对redis.conf文件进行配置。

2.1 RDB快照持久化(Redis默认持久化机制)

在 redis.conf 配置文件中默认有此下配置:

vi redis.conf
输入/RDB可以搜索到下面的位置


RDB会根据配置的策略进行持久化,就是下面的说明,你也可以修改这个策略,如save 60 2
符合设置的要求就会触发策略,rdb文件可以起到异常宕机恢复数据的作用,不过这里最好不要自己改直接用默认的这三个save即可,人家这么设置肯定有道理的

save 900 1           #在900秒(15分钟)之后,如果有1个及以上key发生变化,Redis就会自动触发BGSAVE命令创建快照。

save 300 10          #在300秒(5分钟)之后,如果有10个及以上key发生变化,Redis就会自动触发BGSAVE命令创建快照。

save 60 10000        #在60秒(1分钟)之后,如果有10000个及以上key发生变化,Redis就会自动触发BGSAVE命令创建快照。

rdb默认保存的文件是dump.rdb

一般这个文件会默认直接放在bin目录下

除了默认的save能触发RDB策略,还有两种方式可以触发RDB,一种是通过shutdown关闭redis连接,也就是关闭了redis进程,exit只是退出并不会关闭进程,还有一种是输入flushall命令,shutdown在退出时会触发rdb生成dump.rdb文件,flushall会刷新缓存,也会生成新的dump.rdb文件


如何利用rdb文件恢复?
通过config get dir可以获取到启动目录,redis启动的时候会自动在这个目录(/usr/local/bin)中检查dump.rdb文件并恢复数据,这都是自动执行、扫描的,很方便,一般用这个RDB持久化默认配置就足够了,不用我们做什么操作,它自己生成与自动扫描dump.rdb都在bin目录下

我们看看dump.rdb中是什么

如上,它是你看不懂的编码,其实它存的是二进制文件,我们看不懂,但是计算机读得懂

总结:三种情况会触发RDB,生成RDB文件(dump.rdb),有则覆盖原有的rdb文件
1、save规则满足
2、flushall命令
3、退出(shutdown)redis

优点:适合大规模数据恢复(dump.rdb)
缺点:实时性不高,可能save 60 10000,执行到59秒宕机,导致10000条数据都没有了

Redis 创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本,防止一个服务器丢掉rdb就恢复不了。

2.2 AOF(append-only file)持久化

这个持久化实时性更好,默认不开启,要开启需要手动在redis.conf中进行设置,搜索appendonly,并将其设置为yes
注意:搜索是shift + :,输入/搜索内容

重启redis

1、在redis中输入shutdown,然后exit,关闭redis进程,上面做过这个操作
2、redis-server rconfig/redis.conf  //写redis.conf所在位置,比如我在bin/rconfig/redis.conf,启动redis
3、redis -p 6379


重启后输入一些命令,比如set k1 v1 和 set k2 v2,然后exit退出

可以看到bin目录下面有appendonly.aof文件,我们用vi查看这个文件

发现存的就是我们输入的命令,它就是会实时存储(一般每秒钟同步一次到硬盘),起到一个日志效果
多久持久化一次到硬盘是可以设置的,redis.conf中默认是appendfsync everysec表示每秒同步一次,默认也是一秒一次,这样能兼顾数据和写入性能,这样最多丢失1秒钟的数据

appendfsync always    # 每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
appendfsync everysec  # 每秒钟同步一次,显示地将多个写命令同步到硬盘
appendfsync no        # 让操作系统决定何时进行同步

优点:实时性
缺点:文件比较大,占内存,文件大导致修复速度没有rdb快,运行效率也比较慢

实际默认用RDB,RDB性能更高效,测试完AOF把它关闭,默认用RDB即可

如果redis重新启动却无法启动,说明AOF文件有错位,需要修复这个文件。redis提供了一个工具redis-check-aof

redis-check-aof --fix appendonly.aof	#输入此命令即可修复这个文件,然后就可以重新启动redis

三、Redis发布订阅

Redis发布订阅是一种消息通信模式,如微信公众号,公众号作为发送者发送消息,然后订阅的人就会收到公众号的推送消息。(B站,今日头条等等都是这种模式,发布者和订阅者)
两个命令:subscribe和publish,订阅和发布
在MobaXterm中再开一个服务并启动redis,模拟两个人,一个人作为订阅端,一个人作为发布端,如下


发布端发送信息后,订阅端就会收到相应信息,第一个message表示是信息,不是对象,第二个是订阅的对象(张三),第三个是收到发布者对应的信息

这就类似上面说的公众号或者群聊,Redis可以实现订阅发布,也可以由其他方式实现,比如netty也行,有很多种,我们这里说的是Redis

以上是关于Redis---常见重点知识1(事务持久化机制发布订阅)的主要内容,如果未能解决你的问题,请参考以下文章

Redis----常见重点知识2(主从复制哨兵机制缓存穿透和雪崩)

Redis----常见重点知识2(主从复制哨兵机制缓存穿透和雪崩)

Redis7Redis7 持久化(重点:RDB与AOF重写机制)

Redis学习笔记

Redis学习笔记 [事务和锁机制持久化机制模拟主从复制集群搭建]

redis高级命令4 持久化机制 事务