Redis(3)---常见重点知识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
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小样x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值