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不用担心内存中的数据丢失(断电),因为他有持久化机制,将这些数据持久化到硬盘中。有两种持久化机制:RDB与AOF,主要是对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重写机制)