0

我正在尝试解决双重请求问题:当浏览器向服务器产生两个或多个相同的请求并且它们在不同的应用程序服务器上得到处理时。

在这种情况下,两个请求之一命中:

Mysql::Error: Duplicate entry '...' 
for key 'index_purchases_on_site_id_and_order_number_and_email

之后有救援代码选择现有记录,而不是使用与插入请求相同的参数:

select * from purchases where site_id = ? and order_number = ? and email = ?

但它在数据库中找不到任何东西。

来自数据库查询日志的片段:

  SQL (1.3ms)   BEGIN
  ......
  Purchase Create (0.0ms)   Mysql::Error: Duplicate entry '1887-100264587-9z1CIIDsH2a21+AEEH2OR9LsndO3oIS4D4Am1U5XJ04=
' for key 'index_purchases_on_site_id_and_order_number_and_email': INSERT INTO `purchases` (`order_date`, `referrer`, `created_at`, `updated_at`, `encrypted_email`, `visitor_id`, `order_number`, `coupon_code`, `subtotal`, `customer_id`, `site_id`, `ip_address`) VALUES('2013-01-14 20:57:47', 'https://www.bonobos.com/b/checkout', '2013-01-14 20:57:47', '2013-01-14 20:57:47', '9z1CIIDsH2a21+AEEH2OR9LsndO3oIS4D4Am1U5XJ04=\n', 15813843, '100264587', '', 218.0, NULL, 1887, '12.106.186.6')
  Purchase Load (0.5ms)   SELECT * FROM `purchases` WHERE (order_number = '100264587' AND site_id = 1887 AND encrypted_email = '9z1CIIDsH2a21+AEEH2OR9LsndO3oIS4D4Am1U5XJ04=\n') LIMIT 1
  SQL (18.0ms)   ROLLBACK

这怎么可能?

4

0 回答 0