2024-03-29 12:57:52 发布
网友
我有一个类似于以下内容的web视图:
def process_payment(request, user): amount = 'SELECT amount FROM table where user=user' PayUser(user, amount) return 'OK
问题是,如果有人数千次请求相同的端点(试图欺骗系统),那么user.get_balance()可能会返回相同的值,并且用户将获得多次付款
user.get_balance()
我如何设置“锁”来防止这种情况发生
在此实例中,有几种方法可以设置锁。我以前的工作方式如下:修改值的每个工作线程都必须在表行上设置工作线程GUID,然后检查GUID是否设置为它们的GUID。只有这样他们才能处理它。在清除GUID之前,任何其他工作进程都无法处理该行,并且只有在处理完成后才能执行此操作。在工作流中:
您还可以添加一个时间锁定,然后添加另一个进程,以便在某行被锁定超过10分钟时将GUID重置为null。这样,如果一个工人失败了,他就会自我纠正
因为数据库是ACID兼容的,所以这将起作用
要生成GUID,请查看uuid库
在此实例中,有几种方法可以设置锁。我以前的工作方式如下:修改值的每个工作线程都必须在表行上设置工作线程GUID,然后检查GUID是否设置为它们的GUID。只有这样他们才能处理它。在清除GUID之前,任何其他工作进程都无法处理该行,并且只有在处理完成后才能执行此操作。在工作流中:
您还可以添加一个时间锁定,然后添加另一个进程,以便在某行被锁定超过10分钟时将GUID重置为null。这样,如果一个工人失败了,他就会自我纠正
因为数据库是ACID兼容的,所以这将起作用
要生成GUID,请查看uuid库
相关问题 更多 >
编程相关推荐