0

0

讲解Redis发布订阅演示、事务演示、持久化

coldplay.xixi

coldplay.xixi

发布时间:2021-02-23 09:54:22

|

2301人浏览过

|

来源于CSDN

转载

讲解Redis发布订阅演示、事务演示、持久化

推荐(免费):redis教程

文章目录

  • 一、Redis发布订阅介绍
  • 二、Redis发布订阅演示
  • 三、Redis中的事务
  • 四、转账功能-Redis事务演示
  • 五、转账功能升级版-watch
  • 六、事务的错误处理
    • 业务逻辑错误
    • 语法错误
  • 七、Redis持久化
    • RDB持久化
    • AOF持久化

一、Redis发布订阅介绍

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。

在这里插入图片描述

应用场景:

  • 构建实时消息系统,比如普通的即时聊天,群聊等功能。
  • ②在一个博客网站中,有n多个粉丝订阅了你,当你发布新文章,就可以推送消息给粉丝们。
  • 微信公众号模式

二、Redis发布订阅演示

发布订阅语法
订阅频道:

  • subscribe channel1 [channel2 ...]     订阅给定的一个或多个频道的信息

  • psubscribe pattern1 [pattern2 ...]    订阅一个或多个符合给定模式的频道。
    在这里插入图片描述
    发布频道:

  • publish channel message           将信息发送到指定的频道。
    在这里插入图片描述
    在这里插入图片描述
    退订频道:

  • unsubscribe channel1 [ channel2 ...]    指退订给定的频道。

  • punsubscribe pattern1 [pattern2 ...]   退订所有给定模式的频道。
    在这里插入图片描述

三、Redis中的事务

Redis 事务可以一次执行多个命令,(按顺序地串行化执行,执行中不会被其它命令插入,不许加塞)

事务应用场景:

  • 商品秒杀
  • 转账

两个特点:

  • Redis会将一个事务中的所有命令序列化,然后按顺序执行(任意命令执行失败,其余的命令依然被执行)
  • 执行中不会被其它命令插入,不许出现加赛行为。

一个事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务。

事务相关命令:
multi      标记一个事务块的开始。
exec      执行所有事务块内的命令。
discard     取消事务,放弃执行事务块内的所有命令。
watch key    监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。
unwatch     取消watch命令对所有key的监视。

四、转账功能-Redis事务演示

需求:转帐功能,A向B帐号转帐50元。

  • 转账前A有80元,B有10元。
  • 转账后A有30元,B有60元。

本例先以multi开始一个事务,然后将多个命令入队到事务中,最后由 exec命令触发事务。

  • 输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行。
  • 直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。
    在这里插入图片描述
    执行exec前,如果发现添加的命令有问题,可以使用discard命令放弃队列运行,类似于MySQL中的回滚操作。

五、转账功能升级版-watch

需求:某一账户在一事务内进行操作,在提交事务前,另一个进程对该账户进行操作。

北极象沉浸式AI翻译
北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 - 带您走进沉浸式AI的双语对照体验

下载

上文中的转账是不安全的,在执行中如果有其他命令对账户a或者b的操作,可能会出现幻读;解决办法是添加watch命令,可以对账户进行watch监视,一旦在事务执行中,出现了其他命令对账户a或b操作,程序直接报错回滚。

在这里插入图片描述

执行了watch命令后,如果execdiscard命令先被执行,就不需要再执行unwatch来取消对key的监视了,因为exec或discard命令会自动取消监视。

六、事务的错误处理

业务逻辑错误

发生业务逻辑错误:只有报错的命令不会被执行,而其它的命令都会执行,不会回滚。
在这里插入图片描述

语法错误

发生语法错误:执行时整个的所有队列都会被取消。
在这里插入图片描述

七、Redis持久化

数据存放在内存:高效、但断电内存数据会丢失。
数据存放在硬盘:读写速度慢于内存、但断电数据不会丢失。

RDB持久化

RDB是redis的默认持久化机制。RDB相当于照快照,保存的是数据的一种状态。(几十G的数据可以保存为几KB的快照)

快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb(存在redis.conf文件中)。

优点:

  • 快照保存数据极快、还原数据极快
  • 适用于灾难备份

缺点:

  • 小内存机器不适合使用,RDB机制符合要求就会照快照,占内存。

AOF持久化

由于快照方式是在一定间隔时间做一次的,所以如果redis 意外宕机,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用AOF(Append-Only File)持久化方式。

appendonly yes 命令可以启用 AOF 持久化方式。

有三种方式如下(默认是:每秒 fsync 一次)

  • appendfsync always     收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
  • appendfsync everysec    每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
  • appendfsync no       完全依赖OS,性能最好,但持久化没保证

优点:
AOF比快照方式有更好的持久化性,是由于在使用AOF持久化方式时:redis 会将每一个收到的写命令都通过write 函数追加到文件中(默认是appendonly.aof)。当redis 重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

缺点:

AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大,占硬盘 。例如我们调用 incr test命令 100 次,文件中必须保存全部的 100 条命令,其实有 99 条都是多余的。

相关专题

更多
javascript void运算符
javascript void运算符

void是一元运算符,执行右侧表达式但始终返回undefined;用于丢弃返回值、阻止a标签跳转、IIFE忽略结果、动态导入不取Promise、安全获取undefined。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

vscode的界面字体大小调整
vscode的界面字体大小调整

调整VSCode界面字体大小可通过设置编辑器或整体UI缩放实现;2.修改"Editor:FontSize"改变代码字体;3.设置"Window:ZoomLevel"调整整体界面字体;4.使用Ctrl+滚轮快捷键临时缩放。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

VSCode的注释快捷键
VSCode的注释快捷键

单行注释快捷键为Ctrl+/(Windows/Linux)或Cmd+/(macOS),块注释使用Shift+Alt+A(Windows/Linux)或Shift+Option+A(macOS),VSCode会根据语言类型自动匹配语法,如JavaScript用//,Python用#,C++用//,若快捷键无效需检查语言扩展或插件冲突。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

Golang 命令行工具(CLI)开发实战
Golang 命令行工具(CLI)开发实战

本专题系统讲解 Golang 在命令行工具(CLI)开发中的实战应用,内容涵盖参数解析、子命令设计、配置文件读取、日志输出、错误处理、跨平台编译以及常用CLI库(如 Cobra、Viper)的使用方法。通过完整案例,帮助学习者掌握 使用 Go 构建专业级命令行工具与开发辅助程序的能力。

4

2025.12.29

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

165

2025.12.26

压缩文件加密教程汇总
压缩文件加密教程汇总

本专题整合了压缩文件加密教程,阅读专题下面的文章了解更多详细教程。

56

2025.12.26

wifi无ip分配
wifi无ip分配

本专题整合了wifi无ip分配相关教程,阅读专题下面的文章了解更多详细教程。

108

2025.12.26

漫蛙漫画入口网址
漫蛙漫画入口网址

本专题整合了漫蛙入口网址大全,阅读下面的文章领取更多入口。

356

2025.12.26

b站看视频入口合集
b站看视频入口合集

本专题整合了b站哔哩哔哩相关入口合集,阅读下面的文章查看更多入口。

703

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号