秒殺システムにおけるインタフェースの最適化
1516 ワード
秒殺システムでは、インタフェースをどのように最適化しますか?
1.Redisプリフェッチ在庫減少データベースへのアクセス2.メモリタグ減少Redisへのアクセス3.要求先入バッファ(RabbitMQ)、非同期注文4.Nginxレベル拡張
超過販売を解決する1.データベースプラスユニークインデックス:ユーザーの重複購入を防止する2.SQLプラス在庫数量判断:在庫がマイナスになることを防止する
1.Redisによるデータベースへのアクセスの事前削減
最適化全体の核心構想は、データベースへのアクセスを減らすことです.具体的な考え方は以下の通りである.1.システムを初期化し、商品の在庫数をRedisにロードする.2.要求を受け取り、Redisは在庫を事前に減らし、在庫が不足し、直接返す.そうしないと、3.要求に入って入隊し、すぐに列に戻る.4.要求に出隊し、注文を生成し、在庫を減らす.5.クライアントポーリング、秒殺成功
まず,システム初期化が適切であることを実現し,商品の在庫数をRedisにロードする.ここではSpringのInitializingBeanインタフェースを使用することができます.このインタフェースで実装されたafterPropertiesSet()メソッドは、Beanがロードされたばかりの適切なもので直接呼び出されます.具体的には、Spring springのInitializingBeanインタフェースとApplicationContextAwareインタフェースというブログを参照してください.
afterPropertiesSet()メソッドを使用して、商品在庫をredisに格納します.
1.Redisプリフェッチ在庫減少データベースへのアクセス2.メモリタグ減少Redisへのアクセス3.要求先入バッファ(RabbitMQ)、非同期注文4.Nginxレベル拡張
超過販売を解決する1.データベースプラスユニークインデックス:ユーザーの重複購入を防止する2.SQLプラス在庫数量判断:在庫がマイナスになることを防止する
1.Redisによるデータベースへのアクセスの事前削減
最適化全体の核心構想は、データベースへのアクセスを減らすことです.具体的な考え方は以下の通りである.1.システムを初期化し、商品の在庫数をRedisにロードする.2.要求を受け取り、Redisは在庫を事前に減らし、在庫が不足し、直接返す.そうしないと、3.要求に入って入隊し、すぐに列に戻る.4.要求に出隊し、注文を生成し、在庫を減らす.5.クライアントポーリング、秒殺成功
まず,システム初期化が適切であることを実現し,商品の在庫数をRedisにロードする.ここではSpringのInitializingBeanインタフェースを使用することができます.このインタフェースで実装されたafterPropertiesSet()メソッドは、Beanがロードされたばかりの適切なもので直接呼び出されます.具体的には、Spring springのInitializingBeanインタフェースとApplicationContextAwareインタフェースというブログを参照してください.
afterPropertiesSet()メソッドを使用して、商品在庫をredisに格納します.
/**
*
* */
public void afterPropertiesSet() throws Exception {
List goodsList = goodsService.listGoodsVo();
if(goodsList == null) {
return;
}
for(GoodsVo goods : goodsList) {
redisService.set(GoodsKey.getMiaoshaGoodsStock, ""+goods.getId(), goods.getStockCount());
localOverMap.put(goods.getId(), false);
}
}