- 26
- 0
微信支付文档提到:对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱,微信服务器向同一支付结果通知频率为15/15/30/180/1800/1800/1800/1800/3600(单位:秒).
我的疑问:
(1)同一支付通知是应该不存在并发的?
(2)这里的并发是不是微信服务器频繁请求同一接口,导致同一时间不同支付通知同时请求接口,但数据库来不及读写,造成并发?
(3)如果有并发情况,mongodb端有什么解决办法.
- 共 0 条
- 全部回答
-
寂寞寂寞就好 普通会员 1楼
MongoDB 提供了多种方法来处理并发请求,包括但不限于:
- 使用多线程:MongoDB 提供了一个名为
MongoClient的类,它允许您创建一个MongoClient实例,该实例具有多线程功能。您可以使用MongoClient实例创建多个MongoClient实例,并使用这些实例一起执行数据库操作。这允许您同时处理多个并发请求。
```javascript const MongoClient = require('mongodb').MongoClient; const clients = [];
const client1 = new MongoClient('mongodb://localhost:27017/mydatabase', { useUnifiedTopology: true }); const client2 = new MongoClient('mongodb://localhost:27017/mydatabase', { useUnifiedTopology: true });
async function executeQuery(query) { const client = await clients[Math.floor(Math.random() * clients.length)]; const collection = client.db('mydatabase').collection('mycollection');
try { await collection.find(query).toArray(); } catch (err) { console.error(err); } }
executeQuery('SELECT * FROM mycollection'); executeQuery('SELECT * FROM mycollection'); ```
- 使用并发集合:MongoDB 提供了一个名为
MongoClient的类,该类允许您创建一个MongoClient实例,该实例具有并发集合功能。您可以使用MongoClient实例创建多个MongoClient实例,并使用这些实例一起执行数据库操作。这允许您同时处理多个并发请求。
```javascript const MongoClient = require('mongodb').MongoClient; const clients = [];
const client1 = new MongoClient('mongodb://localhost:27017/mydatabase', { useUnifiedTopology: true }); const client2 = new MongoClient('mongodb://localhost:27017/mydatabase', { useUnifiedTopology: true });
async function executeQuery(query) { const client = await clients[Math.floor(Math.random() * clients.length)]; const collection = client.db('mydatabase').collection('mycollection');
try { await collection.find(query).toArray(); } catch (err) { console.error(err); } }
async function executeQueryWithMulti() { await Promise.all([ executeQuery('SELECT * FROM mycollection'), executeQuery('SELECT * FROM mycollection') ]);
console.log('All queries executed successfully.'); }
executeQueryWithMulti(); ```
- 使用文档级锁:MongoDB 提供了一个名为
mongodb://localhost:27017/mydatabase的端点,该端点允许您执行查询并获取锁。您可以使用MongoClient实例创建多个MongoClient实例,并使用这些实例一起执行数据库操作。这允许您同时处理多个并发请求。
```javascript const MongoClient = require('mongodb').MongoClient; const clients = [];
const client1 = new MongoClient('mongodb://localhost:27017/mydatabase', { useUnifiedTopology: true }); const client2 = new MongoClient('mongodb://localhost:27017/mydatabase', { useUnifiedTopology: true });
async function executeQuery(query) { const client = await clients[Math.floor(Math.random() * clients.length)]; const collection = client.db('mydatabase').collection('mycollection');
try { await collection.find(query).toArray(); } catch (err) { console.error(err); } }
async function executeQueryWithMulti() { await Promise.all([ executeQuery('SELECT * FROM mycollection'), executeQuery('SELECT * FROM mycollection') ]);
console.log('All queries executed successfully.'); }
async function executeQueryWithMultiAndLock() { const client = await MongoClient.connect('mongodb://localhost:27017/mydatabase', { useUnifiedTopology: true }); const collection = client.db('mydatabase').collection('mycollection');
try { await collection.find(query).toArray(); const lock = await collection.insertOne({ name: 'Lock' }); console.log('Lock inserted successfully.'); await collection.find(query).toArray(); console.log('All queries executed successfully.'); } catch (err) { console.error(err); } await client.close(); }
executeQueryWithMultiAndLock(); ```
请注意,使用文档级锁可能导致读取操作阻塞,因此在处理并发请求时应谨慎使用。
- 使用多线程:MongoDB 提供了一个名为
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
