小程序
小游戏
企业微信
微信支付
扫描小程序码分享
- 需求的场景描述(希望解决的问题)
比如在秒杀的场景,怎么处理超卖的问题?
是否能给某次读写加锁,或者其他解决方案?
- 希望提供的能力
云函数读写加锁或者其他能够保证读写过程中没有其他写入操作。
3 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
你好,云开发数据库暂时并不提供显式的事务和锁,但是对于单条数据的操作仍然能保证原子性。
对于你的需求,推荐临时这样处理:
数据库中建一个活动,并加一个 goodsLeft 字段(number 类型),表示剩余多少商品
db.collection(
'activity'
).where({
activity_id: _.eq(
"test1"
),
goodsLeft: _.gt(0)
}).update({
data: {
goodsLeft: _.inc(-1)
//每次把剩余商品数减一
}
}).then(
function
(d){
if
(d.stats.updated>0) {
/*抢购成功*/
else
{
/*抢购失败*/
})
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
谢谢!
没有锁的
数据可能重复
云开发处理秒杀还是算了吧,以现有的云开发能力也就做做增删改查的事情
没有秒杀那么高并发,但是也存在同时写的情况,那普通的电商呢,也不能实现控制库存的情况吗?
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
你好,云开发数据库暂时并不提供显式的事务和锁,但是对于单条数据的操作仍然能保证原子性。
对于你的需求,推荐临时这样处理:
数据库中建一个活动,并加一个 goodsLeft 字段(number 类型),表示剩余多少商品
db.collection(
'activity'
).where({
activity_id: _.eq(
"test1"
),
goodsLeft: _.gt(0)
}).update({
data: {
goodsLeft: _.inc(-1)
//每次把剩余商品数减一
}
}).then(
function
(d){
if
(d.stats.updated>0) {
/*抢购成功*/
}
else
{
/*抢购失败*/
}
})
谢谢!
activity_id: _.eq('test1') 这样写可以吗 activity_id:'test1' 这样有区别吗?我都是后面这样写的。
没有锁的
数据可能重复
云开发处理秒杀还是算了吧,以现有的云开发能力也就做做增删改查的事情
没有秒杀那么高并发,但是也存在同时写的情况,那普通的电商呢,也不能实现控制库存的情况吗?