Nodejs 第四十五章(redis发布订阅+事务)

发布订阅

发布-订阅是一种消息传递模式,其中消息发布者(发布者)将消息发送到频道(channel),而订阅者(订阅者)可以订阅一个或多个频道以接收消息。这种模式允许消息的解耦,发布者和订阅者之间可以独立操作,不需要直接交互。

在Redis中,发布-订阅模式通过以下命令进行操作:

  1. PUBLISH命令:用于将消息发布到指定的频道。语法为:PUBLISH channel message。例如,PUBLISH news "Hello, world!" 将消息"Hello, world!"发布到名为"news"的频道。
  2. SUBSCRIBE命令:用于订阅一个或多个频道。语法为:SUBSCRIBE channel [channel ...]。例如,SUBSCRIBE news sports 订阅了名为"news"和"sports"的频道。
  3. UNSUBSCRIBE命令:用于取消订阅一个或多个频道。语法为:UNSUBSCRIBE [channel [channel ...]]。例如,UNSUBSCRIBE news 取消订阅名为"news"的频道。
  4. PSUBSCRIBE命令:用于模式订阅一个或多个匹配的频道。语法为:PSUBSCRIBE pattern [pattern ...]。其中,pattern可以包含通配符。例如,PSUBSCRIBE news.* 订阅了以"news."开头的所有频道。
  5. PUNSUBSCRIBE命令:用于取消模式订阅一个或多个匹配的频道。语法为:PUNSUBSCRIBE [pattern [pattern ...]]。例如,PUNSUBSCRIBE news.* 取消订阅以"news."开头的所有频道。

事务

Redis支持事务(Transaction),它允许用户将多个命令打包在一起作为一个单元进行执行。事务提供了一种原子性操作的机制,要么所有的命令都执行成功,要么所有的命令都不执行。

Redis的事务使用MULTI、EXEC、WATCH和DISCARD等命令来管理。

  1. MULTI命令:用于开启一个事务。在执行MULTI命令后,Redis会将接下来的命令都添加到事务队列中,而不是立即执行。
  2. EXEC命令:用于执行事务中的所有命令。当执行EXEC命令时,Redis会按照事务队列中的顺序执行所有的命令。执行结果以数组的形式返回给客户端。
  3. WATCH命令:用于对一个或多个键进行监视。如果在事务执行之前,被监视的键被修改了,事务将被中断,不会执行。
  4. DISCARD命令:用于取消事务。当执行DISCARD命令时,所有在事务队列中的命令都会被清空,事务被取消。

使用事务的基本流程如下:

  1. 使用MULTI命令开启一个事务。
  2. 将需要执行的命令添加到事务队列中。
  3. 如果需要,使用WATCH命令监视键。
  4. 执行EXEC命令执行事务。Redis会按照队列中的顺序执行命令,并返回执行结果。
  5. 根据返回结果判断事务执行是否成功。

事务中的命令在执行之前不会立即执行,而是在执行EXEC命令时才会被执行。这意味着事务期间的命令并不会阻塞其他客户端的操作,也不会中断其他客户端对键的读写操作。

需要注意的是,Redis的事务不支持回滚操作。如果在事务执行期间发生错误,事务会继续执行,而不会回滚已执行的命令。因此,在使用Redis事务时,需要保证事务中的命令是幂等的,即多次执行命令的结果和一次执行的结果相同

sh 复制代码
# 连接Redis
redis-cli

# 开启事务
MULTI

# 添加命令到事务队列
SET key1 value1
GET key2

# 执行事务
EXEC
相关推荐
Moment4 分钟前
富文本编辑器技术选型,到底是 Prosemirror 还是 Tiptap 好 ❓❓❓
前端·javascript·面试
xkxnq8 分钟前
第二阶段:Vue 组件化开发(第 18天)
前端·javascript·vue.js
晓得迷路了10 分钟前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
怕浪猫13 分钟前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jinmo_C++13 分钟前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式
鹏多多19 分钟前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript
小Tomkk27 分钟前
⭐️ StarRocks Web 使用介绍与实战指南
前端·ffmpeg
不一样的少年_31 分钟前
产品催: 1 天优化 Vue 官网 SEO?我用这个插件半天搞定(不重构 Nuxt)
前端·javascript·vue.js
-dcr33 分钟前
50.智能体
前端·javascript·人工智能·ai·easyui
行者9643 分钟前
Flutter跨平台开发适配OpenHarmony:进度条组件的深度实践
开发语言·前端·flutter·harmonyos·鸿蒙