新聞中心
想

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),輝南企業(yè)網(wǎng)站建設(shè),輝南品牌網(wǎng)站建設(shè),網(wǎng)站定制,輝南網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,輝南網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
拼單(Groupbuy)是一種新型的消費(fèi)服務(wù),是多位用戶共同購買一件商品,以獲得更優(yōu)惠的折扣價(jià)格的一種消費(fèi)模式,有的團(tuán)購會(huì)有數(shù)量單位,只有當(dāng)達(dá)到了指定數(shù)量,團(tuán)購才開證。
因此,拼單助力中必不可少的就是實(shí)時(shí)計(jì)算拼單進(jìn)度(schedule),以及明確當(dāng)前是否可以獲得優(yōu)惠。除此之外,如果只用傳統(tǒng)的計(jì)算機(jī)技術(shù),計(jì)算拼單進(jìn)度時(shí)還會(huì)面臨一些性能問題:如數(shù)據(jù)量大時(shí),訪問會(huì)比較慢,數(shù)據(jù)實(shí)時(shí)性也會(huì)有影響。
為了解決上述問題,我們引入了Redis作為拼單助力的技術(shù)基礎(chǔ)。Redis是一款開源的、基于內(nèi)存的數(shù)據(jù)存儲(chǔ),非常適合解決事務(wù)性讀寫訪問,特別適合解決實(shí)時(shí)計(jì)算進(jìn)度、獲取優(yōu)惠的應(yīng)用場景。
借助Redis,可以將拼單用戶信息都存儲(chǔ)在Redis中,享受Redis自身卓越的性能優(yōu)勢,實(shí)現(xiàn)實(shí)時(shí)計(jì)算進(jìn)行情況,可以大大減少用戶的等待時(shí)間,極大提升了客戶的體驗(yàn)。
下面,我們就實(shí)現(xiàn)一個(gè)簡單的拼單請求處理助力,借助Redis實(shí)現(xiàn):
// Redis連接
const redis = require(‘redis’);
const client = redis.createClient(6379, ‘127.0.0.1’);
// 拼單數(shù)據(jù)庫
const groupOrderKey = ‘GROUP_ORDER’;
// 團(tuán)購活動(dòng)
// TODO: 根據(jù)實(shí)際情況修改
const groupParams = {
targetNumber: 5, // 目標(biāo)數(shù)量
rewardPrice: 100, // 優(yōu)惠價(jià)格
expireTime: 30 // 拼單有效期(分鐘)
}
function handleGroupOrder(userId, callback) {
let now = new Date().getTime(); // 當(dāng)前時(shí)間(毫秒)
// 1. 統(tǒng)計(jì)當(dāng)前拼單人數(shù)
client.hLen(groupOrderKey, (ERR, len) => {
if (err) return callback(err);
// 2. 非主動(dòng)發(fā)起人
if (len > 0) {
// 檢查是否超出有效期
let expire;
client.hget(groupOrderKey, ‘expire’, (err, expireStr) => {
expire = parseInt(expireStr); // 有效期(毫秒)
if (err) return callback(err);
if (now > expire) {
// 已超出有效期
client.hclear(groupOrderKey, (err, result) => {
if (err) return callback(err);
// 清空數(shù)據(jù),重新計(jì)數(shù)
addUserToGroupOrder(now, userId, len, callback);
});
} else {
// 未超出有效期
if (parseInt(len) >= groupParams.targetNumber) {
// 已達(dá)到拼單目標(biāo)數(shù)量
client.hset(groupOrderKey, ‘price’, groupParams.rewardPrice);
// 填充優(yōu)惠價(jià)
client.hset(groupOrderKey, ‘expire’, now + groupParams.expireTime * 60000);
// 更新有效期
addUserToGroupOrder(now, userId, len, callback);
} else {
// 未達(dá)到拼單目標(biāo)數(shù)量
addUserToGroupOrder(now, userId, len, callback);
}
}
});
} else {
// 主動(dòng)發(fā)起人
addUserToGroupOrder(now, userId, len, callback);
}
});
}
// 添加用戶至拼單
function addUserToGroupOrder(now, userId, len, callback) {
client.hset(groupOrderKey, userId, now);
// 填充用戶信息
if (parseInt(len) === 0) {
// 主動(dòng)發(fā)起人
client.hset(groupOrderKey, ‘expire’, now + groupParams.expireTime * 60000);
// 填充有效期
}
let newLen = len + 1;
client.hset(groupOrderKey, ‘len’, newLen);
// 更新計(jì)數(shù)
callback(null, newLen);
}
handleGroupOrder(‘uid12345’, (err, info) => {
if (err) {
// 異常處理
} else {
console.log(‘增加新用戶,當(dāng)前拼單進(jìn)度:’, info);
}
})
如此一來,利用Redis有效的實(shí)現(xiàn)了拼單助力的計(jì)算及更新,極大的提高了實(shí)時(shí)的響應(yīng)速度。但在實(shí)際的開發(fā)中,我們還需要考慮到Redis機(jī)器的負(fù)載情況,以及緩存的時(shí)效性等等因素,以達(dá)到最佳的體驗(yàn)效果。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章名稱:拼單助力Redis技術(shù)實(shí)現(xiàn)團(tuán)購夢(拼單redis)
網(wǎng)頁路徑:http://m.fisionsoft.com.cn/article/ccodeee.html


咨詢
建站咨詢
