減緩存 新增佇列
@responsebody
("//domiaosha"
)public resultbean findall
(@requestparam
("goodsid"
) long goodsid,
@pathvariable string path, user user,
long addresssid)
throws exception
try//記憶體標記 減少redis訪問
boolean boo = localmap.
get(goodsid);if
(boo)
//預減庫存
long stock = stringredistemplate.
opsforvalue()
.decrement
(miaoshagoodkey.miaoshagoodskucun.
getprefix()
+ goodsid,1)
;if(stock <0)
//判斷是否秒殺到了
miaoshaorder miaoshaorder = miaoshaorderservice.
getmiaoshauserbyuseridandgoodsid
(user.
getid()
, goodsid);if
(miaoshaorder != null)
}catch
(exception e)
future<
?> future = executors.
submit
(new
runnable()
});return resultbean.
success(0
);}
rabbitmq配置
```package com.etc.rabbitmq.mqsender;
import org.springframework.amqp.core.binding;
import org.springframework.amqp.core.bindingbuilder;
import org.springframework.amqp.core.directexchange;
import org.springframework.amqp.core.queue;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
/** * @author mr.findelist
* @program: seckillplus
* @date 2020/8/7 10:33
**/@configuration
public
class
directrabbitconfig
//direct交換機 起名:testdirectexchange
@bean
directexchange testdirectexchange()
//繫結 將佇列和交換機繫結, 並設定用於匹配鍵:testdirectrouting
@bean
binding bindingdirect()
}
傳送到佇列的方法
package com.etc.rabbitmq.mqsender;
import com.alibaba.fastjson.json;
import com.etc.domian.miaoshamessage;
import org.springframework.amqp.rabbit.core.rabbittemplate;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
/** * @author mr.findelist
* @program: seckillplus
* @date 2020/8/7 10:36
**/@service
public
class
sendmessage
}
處理訊息
package com.etc.rabbitmq.mqsender;
import com.alibaba.fastjson.json;
import com.etc.domian.miaoshamessage;
import com.etc.domian.miaoshaorder;
import com.etc.service.impl.miaoshagoodsserviceimpl;
import com.etc.service.impl.miaoshaorderserviceimpl;
import lombok.extern.slf4j.slf4j;
import org.springframework.amqp.rabbit.annotation.rabbithandler;
import org.springframework.amqp.rabbit.annotation.rabbitlistener;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
/** * @author mr.findelist
* @program: seckillplus
* @date 2020/8/7 10:43
**/@slf4j
@service
@rabbitlistener
(queues =
"testdirectqueue"
)//監聽的佇列名稱 testdirectqueue
public
class
directreceiver
//是否重複秒殺
miaoshaorder miaoshaorder = miaoshaorderservice.
getmiaoshauserbyuseridandgoodsid
(ms.
getuser()
.getid()
, ms.
getgoodsid()
);if(miaoshaorder != null)
miaoshaorderservice.
miaosha
(ms.
getuser()
,ms.
getgoodsid()
,ms.
getaddresssid()
);}}
介面優化 Redis預減庫存,記憶體標記
redis預減庫存 主要思路減少對資料庫的訪問,之前的減庫存,直接訪問資料庫,讀取庫存,當高併發請求到來的時候,大量的讀取資料有可能會導致資料庫的崩潰。思路 1.系統初始化的時候,將商品庫存載入到redis 快取中儲存 2.收到請求的時候,現在redis中拿到該商品的庫存值,進行庫存預減,如果減完之...
介面優化 Redis預減庫存,記憶體標記
redis預減庫存 主要思路是減少對資料庫的訪問,之前的減庫存,直接訪問資料庫,讀取庫存,當高併發請求到來時,大量的讀取資料有可能會導致資料庫的崩潰。秒殺介面優化思路 系統初始化時,將商品庫存載入到redis快取中儲存 收到請求的時候,先在redis中拿到該商品的庫存值,進行庫存預減,如果減完之後庫...
減庫存方式
在正常的電商平台購物場景中,使用者的實際購買過程一般分為兩步 下單和支付。其中減庫存操作一般有如下3個方式 秒殺系統一般採用 下單減庫存 邏輯上更為簡單,效能上也更佔優勢。即當買家下單後,在商品的總庫存中減去買家購買數量。下單減庫存是最簡單的減庫存方式,也是控制最精確的一種,下單時直接通過資料庫的事...