当前位置: 首页 > news >正文

VonaJS: 直观好用的分布式锁

分布式锁

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.rkmt.cn/news/47217.html

相关文章:

  • 实用指南:计算机视觉(opencv)——实时颜色检测
  • 2025 年 11 月凝壳炉厂家推荐排行榜,真空感应凝壳炉,真空自耗凝壳炉,150kg真空凝壳炉,160kg真空凝壳炉,250kg真空凝壳炉,1t真空凝壳炉公司推荐
  • i am coming
  • 企业安全-互联网暴露面风险收敛
  • 信息论基础 | 第五章 编码理论
  • 2025 年 11 月桥架厂家推荐排行榜,电缆桥架,梯级式桥架,快速连接桥架,托盘式桥架,不锈钢桥架,深联桥架公司推荐
  • 十类图片深度学习提升准确率(0.9317) - 实践
  • conda相关命令
  • 2025网站建设公司口碑排行榜
  • [JQuery] inject jQuery into any webpage
  • 必看!上下文工程在智能家居的10个关键知识点,架构师整理 - 教程
  • tomcat/idea打包部署报错,RUN 可以 DEBUG 不行
  • 在CMake中打印所有变量
  • .NET 10发布和它的新增功能
  • 2025年EGUOO关节灵活营养素:深度解析七重配方科研链与临床实证
  • 2025年EGUOO关节灵活营养素:深度解析七重配方与专利矩阵
  • 详细介绍:Tomcat核心组件全解析
  • 2025年EGUOO调理肠胃健壮身体粉深度解析:科研壁垒与四重功效全盘点
  • 系统流量突然增加了10倍,该怎么办?
  • 接口(接口中的所有定义都是抽象的,都需要实现类)
  • Local Persistent Volume
  • Plan-and-Execute Agents
  • 无问智推:开启数据消费新范式
  • revit esc取消报错处理
  • 2025年定制全屋家居公司权威推荐榜单:全屋定制装修/全屋定制品牌/全屋定制源头公司精选
  • MATLAB实现图像去模糊
  • 家庭相册私有化:Immich+cpolar构建你的数字记忆堡垒 - 详解
  • 2025年正式整理5款免费在线客服系统软件
  • npm yarn pnpm 区别
  • 文档内容比对桌面软件V2.2.0(新增详细报告输出)