hhyang
hhyang
  • 发布:2023-03-23 12:32
  • 更新:2023-03-23 14:21
  • 阅读:455

unicloud 如何加锁 实现数据一致性

分类:uniCloud

用的是阿里云

大并发同时操作一个字段 导致数据异常的问题 有类似php的文件锁之类的 或者其他的实现方式?

2023-03-23 12:32 负责人:无 分享
已邀请:
1***@163.com

1***@163.com

加锁是实现数据一致性的一种常用方法。
可以通过调用 uni-distributed-lock 模块中的相关 API 来获取锁或释放锁。使用分布式锁可以避免多个节点对同一个资源进行修改时造成的数据不一致问题。

具体操作步骤如下:

1.引入 uni-distributed-lock 模块
在项目中引入 uni-distributed-lock 模块,可以通过 npm 安装该模块并在代码中引入。

2.获取锁
使用 acquireLock 方法获取锁,该方法需要传入一个标识锁的字符串作为参数,并且支持设置锁的过期时间。

const lock = require('uni-distributed-lock')  
  
async function foo() {  
  // 获取名为 'my-lock' 的锁,有效期为 10 秒  
  const acquired = await lock.acquireLock('my-lock', 10000)  
  if (acquired) {  
    console.log('获取锁成功')  
    // 处理业务逻辑  
    // ...  
    // 释放锁  
    await lock.releaseLock('my-lock')  
  } else {  
    console.log('获取锁失败')  
  }  
}

3.释放锁
使用 releaseLock 方法释放锁,该方法需要传入之前用于获取锁的字符串作为参数。

await lock.releaseLock('my-lock')

await lock.releaseLock('my-lock')

  • hhyang (作者)

    uni-distributed-lock 这个模块你在哪里找到的?我找了一圈没找到呢


    2023-03-23 13:05

  • BoredApe

    ChatGPT?


    2023-03-23 13:42

  • hhyang (作者)

    回复 BoredApe: 大大 你们这边有解决方案吗?


    2023-03-23 14:03

  • y***@163.com

    我也没找到这个模块呀,如何加锁呀


    2024-02-28 15:06

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

同时操作一个字段是指什么样的操作?将这个字段设置成某个值还是对这个字段的数值进行增减

  • hhyang (作者)

    增减操作 类型是 double 不能直接使用原子操作


    还有



    • 指派订单,多人抢一个订单

    • 减库存量


    2023-03-23 14:22

  • DCloud_uniCloud_WYQ

    回复 hhyang: 为什么要存成小数?小数加减确实会有问题。


    2023-03-23 14:46

  • hhyang (作者)

    回复 DCloud_uniCloud_WYQ: 屎山代码 金额 数据库之前存的是元为单位 我接手后不想去动它了 所以就按元为单位 用插件计算小数的加减 关键不是这个问题 是如何加锁的问题


    2023-03-23 14:55

  • DCloud_uniCloud_WYQ

    回复 hhyang: 那就只能用事务了


    2023-03-23 15:01

  • hhyang (作者)

    回复 DCloud_uniCloud_WYQ: 目前只有这个方法吗?未来会有这方便的考虑吗? 加锁其实在项目中还是很常见的 希望官方能重视下


    2023-03-23 15:28

  • DCloud_uniCloud_WYQ

    回复 hhyang: 事务就是加锁


    2023-03-23 15:43

要回复问题请先登录注册