REDIS 在電商中的實際應用情境(轉)

來源:互聯網
上載者:User

標籤:

1. 各種計數,商品維度計數和使用者維度計數

說起電商,肯定離不開商品,而附帶商品有各種計數(喜歡數,評論數,評鑑數,瀏覽數,etc),Redis的命令都是原子性的,你可以輕鬆地利用INCR,DECR等命令來計數。

  • 商品維度計數(喜歡數,評論數,評鑑數,瀏覽數,etc)

採用Redis 的類型: Hash. 如果你對redis資料類型不太熟悉,可以參考 http://redis.io/topics/data-types-intro

為product定義個key product:,為每種數值定義hashkey, 譬如喜歡數xihuan

redis> HSET product:1231233 xihuan 5(integer) 1redis> HINCRBY product:1231233 xihuan 1 //喜歡數+1(integer) 6 redis> HGETALL product:1231233 //擷取這key hashkey 和value1) "xihuan"2) "6"
  • 使用者維度計數(動態數、關注數、粉絲數、喜歡商品數、發帖數 等)

使用者維度計數同商品維度計數都採用 Hash. 為User定義個key user:,為每種數值定義hashkey, 譬如關注數follow

redis> HSET user:100000 follow 5(integer) 1redis> HINCRBY user:100000 follow 1 //關注數+1(integer) 6 redis> HGETALL user:100000 //擷取這key hashkey 和value1) "follow"2) "6"
2. 儲存社交關係

譬如將用戶的好友/粉絲/關注,可以存在一個sorted set中,score可以是timestamp,這樣求兩個人的共同好友的操作,可能就只需要用求交集命令即可。

redis> ZADD user:100000:follow 61307510400000 "100001" //score 為timestamp(integer) 1redis> ZADD user:100000:follow 61307510402300 "100002"(integer) 1redis> ZADD user:100000:follow 61307510405600 "100003"(integer) 1redis> ZADD user:200000:follow 61307510400000 "100001"(integer) 1redis> ZADD user:200000:follow 61307510402300 "100005"(integer) 1redis> ZADD user:200000:follow 61307510405600 "100004"(integer) 1redis> ZINTERSTORE out:100000:200000 1 user:100000:follow user:200000:follow //交集命令,獲得共同關注(integer) 2redis> ZRANGE out:100000:200000 0 -11) "100001"
3. 用作緩衝代替memcached(商品列表,評論列表,@提示列表,etc)

相對memcached 簡單的key-value儲存來說,redis眾多的資料結構(list,set,sorted set,hash, etc)可以更方便cache各種業務資料,效能也不亞於memcached。

NOTE: RPUSH pagewviews.user: EXPIRE pagewviews.user: 60 //注意要update timeout

4. 反spam系統(評論,發布商品,論壇發貼,etc)

作為一個電商網站被各種spam攻擊是少不免(垃圾評論、發布垃圾商品、廣告、刷自家商品排名等),針對這些spam制定一系列anti-spam規則,其中有些規則可以利用redis做即時分析,譬如:1分鐘評論不得超過2次、5分鐘評論少於5次等(更多機制/規則需要結合drools )。 採用sorted set將最近一天使用者操作記錄起來(為什麼不全部記錄?節省memory,全部操作會記錄到log,後續利用hadoop進行更全面分析統計),通過ZRANGEBYSCORE user:200000:operation:comment 61307510405600 +inf 獲得1分鐘內的操作記錄, redis> ZADD user:200000:operation:comment 61307510402300 "這是一條評論" //score 為timestamp (integer) 1 redis> ZRANGEBYSCORE user:200000:operation:comment 61307510405600 +inf//獲得1分鐘內的操作記錄 1) "這是一條評論"

BTW, 更複雜一點的即時計算可以採用Storm。

5. 使用者Timeline/Feeds

在逛 有個類似微博的欄目我關注,裡麵包括關注的人、主題、品牌的動態。redis在這邊主要當作cache使用。

redis> ZADD user:100000:feed:topic  61307510400000 <feedId> //score 為timestamp(integer) 1redis> EXPIRE user:100000:feed:topic 24*60*60 //set timeout to one day(integer) 1redis> ZADD user:100000:feed:friend 61307510400000 <feedId> //不同類型feed(integer) 1redis> EXPIRE user:100000:feed:friend 24*60*60 //set timeout(integer) 1
6. 最新列表&熱門排行榜(使用者剛剛喜歡的商品,etc)

這裡採用Redis的List資料結構或sorted set 結構, 方便實現最新列表or熱門排行榜 等業務情境。

7. 訊息通知

其實這業務情境也可以算在計數上,也是採用Hash。如下:

redis> HSET user:<userId>:message:ur system 1//1條未讀系統訊息(integer) 1redis> HINCRBY user:<userId>:message:ur system 1 //未讀系統訊息+1(integer) 2redis> HINCRBY user:<userId>:message:ur comment 1 //未讀評論訊息+1(integer) 1redis> HSET user:<userId>:message:ur system 0//設為系統訊息已讀(integer) 1redis> HGETALL user:<userId>:message:ur //擷取這key hashkey 和value1) "system"2) "0"3) "comment"4) "1"
8. 將Redis用作訊息佇列

當在叢集環境時候,java ConcurrentLinkedQueue 就無法滿足我們需求,此時可以採用Redis的List資料結構實現分布式的訊息佇列。

REDIS 在電商中的實際應用情境(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.