redis預減庫存 rabbitmq非同步下單

2021-10-09 04:27:00 字數 3645 閱讀 4918

減緩存 新增佇列

@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個方式 秒殺系統一般採用 下單減庫存 邏輯上更為簡單,效能上也更佔優勢。即當買家下單後,在商品的總庫存中減去買家購買數量。下單減庫存是最簡單的減庫存方式,也是控制最精確的一種,下單時直接通過資料庫的事...