@Service
パブリック クラス CartServiceImplが実装CartService {
プライベート 静的 最終的な文字列CART =「Cart_を」。
@Autowired
プライベートRedisTemplate redisTemplate。
@Autowired
プライベートSkuFeign skuFeign。
@Autowired
プライベートSpuFeign spuFeign。
/ **
*添加购物车
* @param SKUID
* @paramのNUM
* /
@Override
公共 ボイドアドオン(NUM文字列SKUID、整数、文字列のユーザー名){
/ **
* 1)查询Redisの中的数据
* 2)Redisのは既に、追加、再計算された量の数た場合
* 3)でない場合は、バッファに製品を追加する
* /
のOrderItemのOrderItem =(のOrderItem)redisTemplate.boundHashOps(CARTユーザ名+)に.get(SKUID)。 Redisのから//値
IF(のOrderItem =!ヌル){
// 、カート更新
orderItem.setNum(orderItem.getNum()+ NUM)を、
orderItem.setMoney(orderItem.getNum() * orderItem.getPrice() );
orderItem.setPayMoney(orderItem.getNum() * orderItem.getPrice());
} 他{
// 存在しない、新しいカート
結果<SKU> skuResult =skuFeign.findById(SKUID);
SKU SKU = skuResult.getData();
SPU SPU = spuFeign.findByspuId(sku.getSpuId());
// のOrderItemにSKU変換
のOrderItemは= この.sku2OrderItem(SKU、SPU、NUM)を、
}
// 格納されているのRedisの
redisTemplate.boundHashOps(CART + 名).put(SKUID、のOrderItem);格納された値に//のRedis
}
// SKUのOrderItemに変換する
専用のOrderItem sku2OrderItem(SKU SKU、SPU SPU整数NUM){
のOrderItem OrderItem = 新新のOrderItem();
orderItem.setSpuId(sku.getSpuId());
orderItem.setSkuId(sku.getId());
orderItem.setName(sku.getName());
orderItem.setPrice(sku.getPrice());
orderItem.setNum(NUM);
orderItem.setMoney(NUM * orderItem.getPrice( )); // 価格*数量
orderItem.setPayMoney(NUM * orderItem.getPrice()); // 実際に支払った金額
orderItem.setImage(sku.getImage());
orderItem.setWeight(sku.getWeight())* NUM。 // 個々の重量の数= *
// 設定分類ID
orderItem.setCategoryId1(spu.getCategory1Id());
orderItem.setCategoryId2(spu.getCategory2Id());
orderItem.setCategoryId3(spu.getCategory3Id())。
返すのOrderItemを。
}
}
redisTemplate.boundHashOps(CART + ユーザー名).put(SKUID、のOrderItem); // Redisのために値を保存
redisTemplate.boundHashOps(CART +名)に.get( SKUID); // Redisのからの値は
、ここで述べた値がハッシュ・タイプに格納されている場合、キーはフィールドの複数の複数に対応することができる、この方法のRedisをboundHashOps値に対応するフィールド。利点の一つとして格納されたオブジェクトのハッシュ:各フィールドに文字列型と比較されているが、より多くのメモリを節約する、別々に保存されます。