日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

REDIS 在电商中的实际应用场景(转)

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 REDIS 在电商中的实际应用场景(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

話說使用Redis已經(jīng)有好一段時間,趁有點時間,結(jié)合Guang.com 使用經(jīng)驗,總結(jié)一下Redis 在社會化電商網(wǎng)站的實際應(yīng)用場景。文筆較差,各位看官,湊合著看下吧。

1. 各種計數(shù),商品維度計數(shù)和用戶維度計數(shù)

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

  • 商品維度計數(shù)(喜歡數(shù),評論數(shù),鑒定數(shù),瀏覽數(shù),etc)

采用Redis 的類型:?Hash. 如果你對redis數(shù)據(jù)類型不太熟悉,可以參考 http://redis.io/topics/data-types-intro

為product定義個key?product:,為每種數(shù)值定義hashkey, 譬如喜歡數(shù)xihuan

redis>?HSET?product:1231233?xihuan?5 (integer)?1 redis>?HINCRBY?product:1231233?xihuan?1?//喜歡數(shù)+1 (integer)?6? redis>?HGETALL?product:1231233?//獲取這key?hashkey?和value 1)?"xihuan" 2)?"6"
  • 用戶維度計數(shù)(動態(tài)數(shù)、關(guān)注數(shù)、粉絲數(shù)、喜歡商品數(shù)、發(fā)帖數(shù) 等)

用戶維度計數(shù)同商品維度計數(shù)都采用?Hash. 為User定義個key?user:,為每種數(shù)值定義hashkey, 譬如關(guān)注數(shù)follow

redis>?HSET?user:100000?follow?5 (integer)?1 redis>?HINCRBY?user:100000?follow?1?//關(guān)注數(shù)+1 (integer)?6? redis>?HGETALL?user:100000?//獲取這key?hashkey?和value 1)?"follow" 2)?"6"

2. 存儲社交關(guān)系

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

redis>?ZADD?user:100000:follow?61307510400000?"100001"?//score?為timestamp (integer)?1 redis>?ZADD?user:100000:follow?61307510402300?"100002" (integer)?1 redis>?ZADD?user:100000:follow?61307510405600?"100003" (integer)?1 redis>?ZADD?user:200000:follow?61307510400000?"100001" (integer)?1 redis>?ZADD?user:200000:follow?61307510402300?"100005" (integer)?1 redis>?ZADD?user:200000:follow?61307510405600?"100004" (integer)?1 redis>?ZINTERSTORE?out:100000:200000?1?user:100000:follow?user:200000:follow?//交集命令,獲得共同關(guān)注 (integer)?2 redis>?ZRANGE?out:100000:200000?0?-1 1)?"100001"

3. 用作緩存代替memcached(商品列表,評論列表,@提示列表,etc)

相對memcached 簡單的key-value存儲來說,redis眾多的數(shù)據(jù)結(jié)構(gòu)(list,set,sorted set,hash, etc)可以更方便cache各種業(yè)務(wù)數(shù)據(jù),性能也不亞于memcached。

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

4. 反spam系統(tǒng)(評論,發(fā)布商品,論壇發(fā)貼,etc)

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

BTW, 更復(fù)雜一點的實時計算可以采用Storm。

5. 用戶Timeline/Feeds

在逛?有個類似微博的欄目我關(guān)注,里面包括關(guān)注的人、主題、品牌的動態(tài)。redis在這邊主要當(dāng)作cache使用。

redis>?ZADD?user:100000:feed:topic??61307510400000?<feedId>?//score?為timestamp (integer)?1 redis>?EXPIRE?user:100000:feed:topic?24*60*60?//set?timeout?to?one?day (integer)?1 redis>?ZADD?user:100000:feed:friend?61307510400000?<feedId>?//不同類型feed (integer)?1 redis>?EXPIRE?user:100000:feed:friend?24*60*60?//set?timeout (integer)?1

6. 最新列表&排行榜(用戶剛剛喜歡的商品,etc)

這里采用Redis的List數(shù)據(jù)結(jié)構(gòu)或sorted set?結(jié)構(gòu), 方便實現(xiàn)最新列表or排行榜 等業(yè)務(wù)場景。

7. 消息通知

其實這業(yè)務(wù)場景也可以算在計數(shù)上,也是采用Hash。如下:

redis>?HSET?user:<userId>:message:ur?system?1//1條未讀系統(tǒng)消息 (integer)?1 redis>?HINCRBY?user:<userId>:message:ur?system?1?//未讀系統(tǒng)消息+1 (integer)?2 redis>?HINCRBY?user:<userId>:message:ur?comment?1?//未讀評論消息+1 (integer)?1 redis>?HSET?user:<userId>:message:ur?system?0//設(shè)為系統(tǒng)消息已讀 (integer)?1 redis>?HGETALL?user:<userId>:message:ur?//獲取這key?hashkey?和value 1)?"system" 2)?"0" 3)?"comment" 4)?"1"

8. 將Redis用作消息隊列

當(dāng)在集群環(huán)境時候,java?ConcurrentLinkedQueue?就無法滿足我們需求,此時可以采用Redis的List數(shù)據(jù)結(jié)構(gòu)實現(xiàn)分布式的消息隊列。


轉(zhuǎn)載于:https://my.oschina.net/lnmpstudy/blog/266541

總結(jié)

以上是生活随笔為你收集整理的REDIS 在电商中的实际应用场景(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。