不允许同时页面查看Laravel

时间:2018-02-18 07:09:04

标签: php laravel laravel-5

我有一个自助交付中心的应用程序,其中有几个运营商(用户)可以处理他们共同的订单列表。但我需要限制它们同时处理相同的订单。

即。当某个用户查看订单并且第二个用户也进入该订单时,不得为第二个用户显示处理按钮。

如何在Laravel 5.5中执行此操作?

2 个答案:

答案 0 :(得分:0)

虽然有很多可能的方法来处理这样的问题,但为该订单添加一个缓存条目以指示它当前正在处理它可能会起到作用。

有一些警告,但以下逻辑可能有效:

  1. 当用户加载订单时,在此缓存中为此订单添加一个条目,可能是缓存键" order_in_progress:1234"
  2. 根据处理订单所需的时间,在合适的时间点设置缓存密钥的生存时间,但也许是5分钟(如果它没有得到,它应该回到能够被处理的状态完成)。
  3. 缓存值应该是尝试处理订单的用户,以便页面刷新仍然允许同一用户再次加载页面并进行编辑。
  4. 使用缓存密钥和生存时间值,您甚至可以向用户显示处理订单的剩余时间,然后才能由其他人处理(这是额外的)。
  5. 如果多个用户同时加载未处理的订单页面,他们可能会点击可能导致再次加载页面的链接,但关键是要检查此订单号是否有缓存条目缓存表明它已被处理。如果存在密钥,它仍然可见,但在第一个用户成功或超时之前不能执行任何操作。
  6. 处理订单后,作为清理的一部分,您可以删除该缓存密钥;或者,您可以让它过期,因为处理过的订单无论如何也不会出现在该屏幕上,因为它们并不相关。
  7. 这可能会满足您的要求,甚至可能更多。老实说,根据您的要求,听起来可能会有更多您无法考虑的事情,但可以随时要求进一步澄清。

答案 1 :(得分:0)

您的问题有点Race condition

一个不错的解决方法是在正在查看的订单上设置锁定标志并设置释放它的超时,但由于此(主要)问题,您必须重新考虑应用程序架构。