淘淘商城第78講 查詢商品詳情新增快取的分析

2021-08-02 10:39:37 字數 2195 閱讀 3533

通過上文的學習,我相信大家一定實現了商品詳情頁面的展示,接下來我們將學習如何在商品詳情頁面展示時新增快取。

因為查詢商品詳情涉及到查詢資料庫,當商品詳情頁面的訪問的併發量比較高時,查詢商品詳情都去查詢資料庫的話,資料庫的壓力是難以承受的,為了解決這個問題就要引入快取了,即使用redis做快取。

但是引入快取又有乙個問題需要考慮,那就是快取資源是非常有限的,如果我們把大量的商品詳情資訊都放到快取當中去的話,那麼快取的壓力是非常大的。我們知道,商品是分熱點商品和冷門商品的,熱點商品的訪問量很大,但是冷門商品可能十天半月也沒有人訪問,因此儲存熱門商品資訊才能提高快取的利用率。

redis儲存資訊有多種方式,不過這裡我只講兩種方式,一種是雜湊方式,這種儲存方式的好處是可以將快取資訊分類儲存,比如之前我們在展示**首頁的時候,頁面上的商品都是分類展示的,為了區分要快取的是首頁的資訊,因此設定雜湊的key是tbcontent_key,首頁大廣告位的分類id是89,因此89作為第二個引數(即field),value則是首頁大廣告位的所有商品資訊,如下圖所示。

另一種儲存方式是string(字串)儲存方式,也就是普通的key-value形式,如下圖所示。

雜湊儲存方式適合做快取處理但是它卻不適合設定快取過期時間,這是因為它不支援具體到每個field進行設定過期時間,比如上面提到的**首頁展示時儲存的key(tbcontent_key),redis僅支援對hash的key設定過期時間,這也就意味著如果我們設定的tbcontent_key這個key到期後,首頁所有的商品的快取資訊都將消失,這顯然是不合理的,我們想要的是針對每個商品設定過期時間,因此設定過期時間的話,hash儲存並不合適,string儲存是比較適合的。

那麼問題又來了,string儲存時key是容易重複的,怎麼來避免key衝突呢?我們可以通過新增字首、字尾的方式對redis的key進行分類,如下圖所示。既然是要儲存商品詳情,那就可以在商品id前面起個名字,這裡我就叫做item_info(大家可以隨便起),並在商品id的後面新增字尾base(代表的是商品基本資訊),desc(代表的是商品描述資訊)。

這樣,我們既可以區分key還可以針對每個商品設定過期時間,但是現在又有個問題,我們怎樣儲存二維表(就是我們**中的資料,**有行和列,這就是二維表)中的資訊呢?我們以tb_item表為例,如下圖所示,我們怎麼把這張表中的資料儲存到redis中去呢?

如果要想把二維表中的資料儲存到redis中去,那麼key就需要下面來設定:

表名就是第一層

主鍵是第二層

欄位名第三層

三層之間使用:分隔,這樣key就設定好了,而value就是欄位中的內容。

下面我們按表名:id:列名來表示,如下圖所示。

我們可以給key設定過期時間,比如給tb_item:536563:id設定過期時間為100秒,這樣每次檢視tb_item:536563:id時都可以看到ttl剩餘秒數在減少直到減到0,然後就過期了。

過期後我們可以使用ttl tb_item:536563:id命令來檢視剩餘時間,查到的值會是-2,因為tb_item:536563:id這個key已經從redis資料庫中清除了,如下圖所示。

因此,我們便可以通過這種方式來新增商品詳情的快取以提高快取的利用效率。

淘淘商城 實現商品詳情頁面展示

我相信大家通過上文的學習已經搭建好了商品詳情頁面展示工程,本文我將帶領大家一起實現商品詳情頁面展示。首先我們來看一下商品詳情頁面 可以看到商品一般屬性在tbitem實體類中都是存在的,只是需要特殊處理,因為tbitem實體類中的字段儲存的是以 分隔的位址的字串,因此要將字串轉換成陣列才行,而tbit...

商品詳情頁面展示 淘淘商城(二十二)

呼叫服務展示商品資訊 service層 controller層 執行工程 商品描述 商品基本資訊 商品的key redis item key item 商品基礎資訊的key item base key base 商品描述的key item desc key desc 商品引數的key item pa...

學習淘淘商城第六十五課(查詢商品詳情新增快取分析)

上節課我們一起學習了商品詳情展示,這節課我們一起學習下如何新增快取。redis儲存資訊有兩種方式,一種是雜湊方式,這種儲存方式的好處是可以將快取資訊分類儲存,比如在前面我們在首頁展示的時候,頁面上的商品都是分類展示的,為了區分要快取的是首頁的資訊,因此設定雜湊的key是index content,首...