VonaJS: 直观好用的分布式锁

news/2025/11/12 10:37:20/文章来源:https://www.cnblogs.com/zhennann/p/19212825

分布式锁

VonaJS 基于Redlock提供了直观、易用的分布式锁

创建分布式锁

比如,在模块 demo-student 中创建分布式锁

1. Cli命令

$ vona :create:bean meta redlock --module=demo-student

2. 菜单命令

右键菜单 - [模块路径]: `Vona Meta/Redlock`

分布式锁定义

export type TypeRedlockLockResource = never;
export type TypeRedlockLockIsolateResource = never;@Meta()
export class MetaRedlock extends BeanRedlockBase<TypeRedlockLockResource, TypeRedlockLockIsolateResource> {}
  • TypeRedlockLockResource: 定义lock方法使用的锁资源
  • TypeRedlockLockIsolateResource: 定义lockIsolate方法使用的锁资源

定义锁资源

当我们使用分布式锁时,需要指定对应的锁资源。比如,为lock方法定义锁资源name:

- export type TypeRedlockLockResource = never;
+ export type TypeRedlockLockResource = 'name';

使用分布式锁

class ControllerStudent {async test() {const res = await this.scope.redlock.lock('name', async () => {// do something in lockreturn 'some result';});}
}  
  • redlock.lock:传入锁资源name

lock/lockIsolate

VonaJS 提供了两个锁方法: lock/lockIsolate。二者的区别是:lockIsolate自动实现了数据源分级,从而避免因数据源竞争而导致的死锁情况

  • 参见: 数据源分级

定义锁资源: lockIsolate

lockIsolate方法定义锁资源:

- export type TypeRedlockLockIsolateResource = never;
+ export type TypeRedlockLockIsolateResource = 'name';

使用分布式锁: lockIsolate

class ControllerStudent {async test() {const res = await this.scope.redlock.lockIsolate('name', async () => {// do something in lockreturn 'some result';});}
}  

定义锁资源: 字面量模版

锁资源还可以是字面量模版

比如,如果要为不同的用户单独提供锁资源,那么可以使用形如user-${userId}的字符串,作为锁资源名称

- export type TypeRedlockLockIsolateResource = 'name';
+ export type TypeRedlockLockIsolateResource = 'name' | `user-${string}`;

这样,在使用lockIsolate方法时同样可以提供类型提示

class ControllerStudent {async test() {const userId = 1;const res = await this.scope.redlock.lockIsolate(`user-${userId}`, async () => {// do something in lockreturn 'some result';});}
}  

查看当前生效的分布式锁清单

可以直接输出当前生效的分布式锁清单

class ControllerStudent {@Web.get('test')test() {
+   this.bean.onion.meta.inspectMeta('redlock');}
}
  • this.bean.onion: 取得全局 Service 实例 onion
  • .meta: 取得与 meta 相关的 Service 实例
  • .inspectMeta: 输出当前生效的分布式锁清单

当访问test API 时,会自动在控制台输出当前生效的分布式锁清单,效果如下:

redlock-1

  • Github:https://github.com/vonajs/vona
  • 文档:https://vona.js.org/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:计算机视觉(opencv)——实时颜色检测

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年 11 月悬浮炉厂家推荐排行榜,真空悬浮炉,真空感应悬浮炉,50kg悬浮炉,30kg悬浮炉,15kg悬浮炉,5kg悬浮炉公司精选

2025年11月悬浮炉厂家推荐排行榜:真空悬浮炉、真空感应悬浮炉及多规格悬浮炉公司精选 一、行业技术背景与发展现状 悬浮熔炼技术作为特种冶金装备领域的重要分支,近年来在高端材料制备、航空航天、新能源等领域展现出…

2025 年 11 月凝壳炉厂家推荐排行榜,真空感应凝壳炉,真空自耗凝壳炉,150kg真空凝壳炉,160kg真空凝壳炉,250kg真空凝壳炉,1t真空凝壳炉公司推荐

2025年11月凝壳炉厂家推荐排行榜:真空感应与真空自耗凝壳炉专业指南 行业技术背景与发展现状 凝壳炉作为特种冶金装备的核心设备,在高端材料制备领域发挥着不可替代的作用。随着新材料产业的快速发展,真空感应凝壳炉…

企业安全-互联网暴露面风险收敛

企业安全-互联网暴露面风险收敛企业容易遭受网络攻击的地方有两大块:员工使用的互联网终端(本章不讨论) 对互联网的暴露面想要收敛对外暴露面的风险,就必须先知道自己的暴露面范围。以下是企业常见的暴露面的分类,…

信息论基础 | 第五章 编码理论

2025-11-10 11:02:47 星期一 5.1 关于编码的例子 首先给出定义 定义 关于随机变量 \(X\) 的信源编码 \(C\) 是从 \(X\) 的取值空间 \(\mathcal{X}\) 到 \(\mathcal{D}^*\) 的一个映射,其中 \(\mathcal{D}^*\) 表示 \(…

2025年高端员工工作服定做厂家权威推荐榜单:高端工服/高端劳保工作服/高端夏季工作服源头厂家精选

一套高品质的工作服,已成为企业形象展示、员工安全保障与团队凝聚力提升的重要载体。 据行业数据显示,2025年中国职业装市场规模预计达到2300亿元,年均复合增长率保持在8%-10%左右。在消费升级和技术进步的双重推动…

2025 年 11 月桥架厂家推荐排行榜,电缆桥架,梯级式桥架,快速连接桥架,托盘式桥架,不锈钢桥架,深联桥架公司推荐

2025 年 11 月桥架厂家推荐排行榜:电缆桥架、梯级式桥架、快速连接桥架、托盘式桥架、不锈钢桥架、深联桥架公司推荐 行业背景与发展趋势 桥架作为现代建筑电气布线系统的重要组成部分,在电力、通信、数据中心等领域…

在跳板机的远程桌面中输入ctrl+alt+end

在跳板机的远程桌面中输入ctrl+alt+end在终端服务器中cmd中输入osk打开系统键盘(不能打开屏幕键盘,测试发现没用) 点击ctrl+alt+del 组合键

十类图片深度学习提升准确率(0.9317) - 实践

十类图片深度学习提升准确率(0.9317) - 实践2025-11-12 10:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

实现文件外发管控怎么做的全面指南

在企业进行文件外发管理时,全面的管控措施能有效提升信息安全与运营效率。首先,细化权限管理是保护敏感信息的基石,通过明确的权限划分,可以有效控制谁能够访问和外发特定文件。其次,规范的审批流程确保每一份文件…

2025CSP-S组 T2 部分分做法

S组 T2 部分分分析很重要,如果全部分类写出,可以得72分,虽没想出最后正解,但也很高了 想得到满分,就要注意到n比m小, k<=10, 也很小。这两个就是瓶颈。 P14362 [CSP-S 2025] 道路修复 / road(官方数据) 【解…

2025 年 11 月管道厂家推荐排行榜,PVC管道,PPR管道,市政管道,民用管道,深塑管道,HDPE波纹管道公司推荐

2025年11月管道厂家推荐排行榜:PVC管道、PPR管道、市政管道、民用管道、深塑管道、HDPE波纹管道公司推荐 行业背景与发展趋势 管道系统作为基础设施建设的重要组成部分,在城镇化进程和建筑工程领域发挥着关键作用。随…

conda相关命令

在 Anaconda Prompt(或 PowerShell 已启用 conda)里运行: conda --version 作用:检查 conda 是否可用(会显示版本号)。 conda create -n mlstm37 python=3.7 -y 作用:创建一个名字叫 mlstm37 的新 conda 环境,…

VonaJS: I18n如何支持Swagger多语言

VonaJS提供的I18n支持模块化体系。每个业务模块都可以单独提供自己的 I18n 语言资源。我们先了解I18n的一般用法,然后再看看如何支持Swagger多语言VonaJS提供的I18n支持模块化体系。每个业务模块都可以单独提供自己的…

2025网站建设公司口碑排行榜

当数字化浪潮从 “流量争夺” 迈入 “价值深耕”,企业网站正告别单一的 “线上名片” 身份,迎来一场从功能到内核的深度重构。AI 赋能的智能交互、私域闭环的流量沉淀、数据驱动的精准运营,再叠加 Web3.0 技术与可持…

[JQuery] inject jQuery into any webpage

You can easily inject jQuery into any webpage so you can use it directly in your Chrome DevTools console. Here are several precise methods, from simplest to most robust:Method 1 — Inject via Console O…

2025年环氧防腐底漆生产厂家权威推荐榜单:水性有机硅/水性聚氨酯漆/双组份水性漆源头厂家精选

在环保政策趋严与工业需求升级的双重推动下,水性环氧防腐底漆正逐步取代传统溶剂型产品,成为工业防护领域的新选择。 据行业数据显示,2024年中国水性工业漆市场规模已突破350亿元,年增长率保持在15%以上。其中环氧…

必看!上下文工程在智能家居的10个关键知识点,架构师整理 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

跨网文件传输怎么做?主要有哪几种安全有效的解决方案?

跨网文件传输是指在不同网络之间传递数据,这在面对网络隔离和信息安全挑战时尤为重要。企业需要掌握有效的传输方案,以确保文件在安全和合规的情况下进行。首先,Ftrans MDE提供了灵活的操作方式,可以支持多种文件传…