当前位置: 首页 > 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.jsqmd.com/news/38207/

相关文章:

  • 实用指南:计算机视觉(opencv)——实时颜色检测
  • 2025 年 11 月悬浮炉厂家推荐排行榜,真空悬浮炉,真空感应悬浮炉,50kg悬浮炉,30kg悬浮炉,15kg悬浮炉,5kg悬浮炉公司精选
  • 2025 年 11 月凝壳炉厂家推荐排行榜,真空感应凝壳炉,真空自耗凝壳炉,150kg真空凝壳炉,160kg真空凝壳炉,250kg真空凝壳炉,1t真空凝壳炉公司推荐
  • i am coming
  • 企业安全-互联网暴露面风险收敛
  • 信息论基础 | 第五章 编码理论
  • 2025年高端员工工作服定做厂家权威推荐榜单:高端工服/高端劳保工作服/高端夏季工作服源头厂家精选
  • 2025 年 11 月桥架厂家推荐排行榜,电缆桥架,梯级式桥架,快速连接桥架,托盘式桥架,不锈钢桥架,深联桥架公司推荐
  • 在跳板机的远程桌面中输入ctrl+alt+end
  • 十类图片深度学习提升准确率(0.9317) - 实践
  • 2025年环氧防腐底漆生产厂家权威推荐榜单:水性有机硅/水性聚氨酯漆/双组份水性漆源头厂家精选
  • 必看!上下文工程在智能家居的10个关键知识点,架构师整理 - 教程
  • 跨网文件传输怎么做?主要有哪几种安全有效的解决方案?
  • 2025企业选择什么样的IT监控厂商?数字化转型值得部署的5款运维监控产品推荐
  • springboot 使用druid 配置数据库密码加密
  • 最佳 3D 文件格式的终极指南
  • 混沌工程
  • tomcat/idea打包部署报错,RUN 可以 DEBUG 不行
  • 在CMake中打印所有变量
  • 2025年EGUOO冠军代言:深度解析科学营养与竞技精神的双向赋能
  • 迈威IMC系列光纤收发器为何成为市场“真香”选择?
  • 2025年EGUOO肠胃片成分权威解析:四维科学矩阵如何重塑肠胃养护范式
  • 【汇总】VS Code Windows 快捷键 (三列中英文对照)
  • 邮件系统日志分析常见错误案例盘点
  • revit api 修改视图范围
  • 2025年EGUOO官网深度解析:科研透明视角下的膳食营养窗口
  • 2025年EGUOO护肝片深度解析:科研矩阵下的成分协同与代谢干预
  • 数字写作工具观察:Markdown编辑器的本地化新选择
  • 2025年11月无线表面肌电生产厂家与品牌推荐:谁才是行业翘楚?
  • 2025年EGUOO关节营养素:深度解析复合配方与实证功效