按照粒度由粗到細(xì):
以商品詳情頁為例
1、頁面級(jí)別緩存
(有時(shí)也叫url級(jí)別緩存,將頁面手動(dòng)渲染存到redis(key=商品id,val="商品詳情頁面,以后再次請(qǐng)求這個(gè)頁面時(shí),從redis中獲取,直接向前端返回text/html,并且可以告訴瀏覽器在本地緩存該頁面,缺點(diǎn)是頁面數(shù)據(jù)更新不及時(shí))
2、對(duì)象級(jí)別緩存
(如商品數(shù)據(jù),(key= 商品id,val=“數(shù)據(jù)庫查出的商品數(shù)據(jù)”)將查詢過一次的商品信息存到redis,第二次請(qǐng)求改商品數(shù)據(jù)時(shí),優(yōu)先到redis查詢)
redis做緩存的思路是:
1、先檢查redis有無數(shù)據(jù)
1.1、有就返回
1.2、沒有,就查詢數(shù)據(jù)庫,存入redis,再返回
2、注意緩存的生命周期,
如果周期是永久,那么redis很容易崩掉,只是時(shí)間的問題
redis在秒殺中的使用:
1、先將秒殺商品庫存預(yù)存到redis
2、秒殺開始后,在redis中預(yù)減庫存,減為0該商品秒殺結(jié)束(redis是單線程的)
3、如果為了減輕對(duì)redis的訪問壓力,可以將用戶提交的秒殺請(qǐng)求放到mq(比如RabbitMq)中
比如一共只有10件商品,一共有10萬用戶虎視眈眈,都幾乎同一時(shí)間提交秒殺請(qǐng)求,
3.1、可以將請(qǐng)求放到消息隊(duì)列中,返回給前端是“排隊(duì)中";
3.2、消費(fèi)者(隊(duì)列的”消費(fèi)者“)按照固定的速度從消息隊(duì)列中取數(shù)據(jù),創(chuàng)建訂單到數(shù)據(jù)庫(也就有條不紊的創(chuàng)建10個(gè)訂單,數(shù)據(jù)庫0沖擊),
3.3、雖然有可能是排到前10的用戶,如果由于某種原因創(chuàng)建訂單失敗,就會(huì)將該用戶的秒殺請(qǐng)求放到mq尾部,接著給隊(duì)列中的其他用戶創(chuàng)建訂單
3.4、創(chuàng)建訂單成功的請(qǐng)求,將該請(qǐng)求從mq中移除,對(duì)用戶發(fā)送短信”恭喜,秒殺成功!“
3.5、成功創(chuàng)建10個(gè)訂單之后(也就是秒殺結(jié)束),給隊(duì)列中其他用戶請(qǐng)求返回”秒殺失敗“