Redis

Redis是一種支持Key-Value等多種數(shù)據(jù)結(jié)構(gòu)的內(nèi)存 數(shù)據(jù)庫(kù) ??捎糜诰彺?、事件發(fā)布或訂閱、高速隊(duì)列等場(chǎng)景。該數(shù)據(jù)庫(kù)使用ANSI C語(yǔ)言編寫(xiě),支持網(wǎng)絡(luò),提供字符串、哈希、列表、隊(duì)列、集合結(jié)構(gòu)直接存取,基于內(nèi)存,可持久化。有關(guān)Redis的詳細(xì)信息,請(qǐng)?jiān)L問(wèn)Redis官方網(wǎng)站https:// redis .io/。

Redis應(yīng)用場(chǎng)景

很多大型電商網(wǎng)站、 視頻直播 和游戲應(yīng)用等,存在大規(guī)模數(shù)據(jù)訪(fǎng)問(wèn),對(duì)數(shù)據(jù)查詢(xún)效率要求高,且數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單,不涉及太多關(guān)聯(lián)查詢(xún)。這種場(chǎng)景使用Redis,在速度上對(duì)傳統(tǒng)磁盤(pán)數(shù)據(jù)庫(kù)有很大優(yōu)勢(shì),能夠有效減少數(shù)據(jù)庫(kù)磁盤(pán)IO,提高數(shù)據(jù)查詢(xún)效率,減輕管理維護(hù)工作量,降低數(shù)據(jù)庫(kù)存儲(chǔ)成本。Redis對(duì)傳統(tǒng)磁盤(pán)數(shù)據(jù)庫(kù)是一個(gè)重要的補(bǔ)充,成為了互聯(lián)網(wǎng)應(yīng)用,尤其是支持高并發(fā)訪(fǎng)問(wèn)的互聯(lián)網(wǎng)應(yīng)用必不可少的基礎(chǔ)服務(wù)之一。

以下舉幾個(gè)典型樣例:

(電商網(wǎng)站)秒殺搶購(gòu)

電商網(wǎng)站的商品類(lèi)目、推薦系統(tǒng)以及秒殺搶購(gòu)活動(dòng),適宜使用Redis緩存數(shù)據(jù)庫(kù)。

例如秒殺搶購(gòu)活動(dòng),并發(fā)高,對(duì)于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)來(lái)說(shuō)訪(fǎng)問(wèn)壓力大,需要較高的硬件配置(如磁盤(pán)IO)支撐。Redis數(shù)據(jù)庫(kù),單節(jié)點(diǎn)QPS支撐能達(dá)到10萬(wàn),輕松應(yīng)對(duì)秒殺并發(fā)。實(shí)現(xiàn)秒殺和數(shù)據(jù)加鎖的命令簡(jiǎn)單,使用SET、GET、DEL、RPUSH等命令即可。

加鎖部分,可參考最佳實(shí)踐:使用DCS實(shí)現(xiàn)分布式鎖

(視頻直播)消息彈幕

直播間的在線(xiàn)用戶(hù)列表,禮物排行榜,彈幕消息等信息,都適合使用Redis中的SortedSet結(jié)構(gòu)進(jìn)行存儲(chǔ)。

例如彈幕消息,可使用ZREVRANGEBYSCORE排序返回,在Redis5.0中,新增了zpopmax,zpopmin命令,更加方便消息處理。

(游戲應(yīng)用)游戲排行榜

在線(xiàn)游戲一般涉及排行榜實(shí)時(shí)展現(xiàn),比如列出當(dāng)前得分最高的10個(gè)用戶(hù)。使用Redis的有序集合存儲(chǔ)用戶(hù)排行榜非常合適,有序集合使用非常簡(jiǎn)單,提供多達(dá)20個(gè)操作集合的命令。

可參考最佳實(shí)踐:使用DCS實(shí)現(xiàn)排行榜功能

(社交APP)返回最新評(píng)論/回復(fù)

在web類(lèi)應(yīng)用中,常有“最新評(píng)論”之類(lèi)的查詢(xún),如果使用關(guān)系型數(shù)據(jù)庫(kù),往往涉及到按評(píng)論時(shí)間逆排序,隨著評(píng)論越來(lái)越多,排序效率越來(lái)越低,且并發(fā)頻繁。

使用Redis的List(鏈表),例如存儲(chǔ)最新1000條評(píng)論,當(dāng)請(qǐng)求的評(píng)論數(shù)在這個(gè)范圍,就不需要訪(fǎng)問(wèn)磁盤(pán)數(shù)據(jù)庫(kù),直接從緩存中返回,減少數(shù)據(jù)庫(kù)壓力的同時(shí),提升APP的響應(yīng)速度。