Redis在電商中的實際應用 Java

2021-08-07 16:39:14 字數 3344 閱讀 9477

採用redis 的型別:hash. 如果你對redis資料型別不太熟悉,可以參考 為product定義個keyproduct:,為每種數值定義hashkey, 譬如喜歡數like

jedis.hset("product:1", "like", "5");

jedis.hincrby("product:1", "like", 1);//

喜歡加一

system.out.print(jedis.hget("product:1", "like"));

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

jedis.hset("user:1", "follow", "5");

jedis.hincrby("user:1", "follow", 1);//

關注數加一

system.out.print(jedis.hget("user:1", "follow"));

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

jedis.zadd("user:1000:friends", system.currenttimemillis(), "user:1001");

//uid為1000使用者和uid為1001是朋友 , score值設定時間戳

jedis.zadd("user:1000:friends", system.currenttimemillis(), "user:1002");

//uid為1000使用者和uid為1002是朋友 , score值設定時間戳

jedis.zadd("user:2000:friends", system.currenttimemillis(), "user:1001");

jedis.zadd("user:2000:friends", system.currenttimemillis(), "user:1003");

jedis.zinterstore("com_friends:1000:2000", "user:1000:friends", "user:2000:friends");

system.out.println(jedis.zrange("com_friends:1000:2000", 0, -1));

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

採用sorted set將最近一天使用者操作記錄起來(為什麼不全部記錄?節省memory,全部操作會記錄到log,後續利用hadoop進行更全面分析統計)

if(!jedis.exists("user:1000:comment"))

else

else

}

應用於關注的人、主題、品牌及專欄,redis在這邊主要當作cache使用

jedis.zadd("user:2000:feed:topic", system.currenttimemillis(), "13topic" +system.currenttimemillis());

//score為timestamp uid為2000的使用者關注tid為13的topic

jedis.expire("user:2000:feed:topic", 10);

//關注有效期為10秒

system.out.println(jedis.zrange("user:2000:feed:topic", 0, -1));

用於記錄使用者剛剛喜歡的商品最新列表or排行榜 等業務場景

jedis.zadd("user:1000:product:like", system.currenttimemillis(), "003");

thread.currentthread();

thread.sleep(10);

jedis.zadd("user:1000:product:like", system.currenttimemillis(), "001");

thread.sleep(10);

jedis.zadd("user:1000:product:like", system.currenttimemillis(), "004");

thread.sleep(10);

jedis.zadd("user:1000:product:like", system.currenttimemillis(), "002");

thread.sleep(10);

//預設喜歡時間公升序排列

setresult = jedis.zrange("user:1000:product:like", 0, -1);

system.out.println(result);

//按喜歡時間降序排列

result = jedis.zrevrange("user:1000:product:like", 0, -1);

system.out.println(result);

[003, 001, 004, 002]

[002, 004, 001, 003]

採用hash結構對訊息通知業務場景計數

//

設定1條未讀系統訊息

jedis.hset("user:1000:message:num", "sysmessagenum", "1");

jedis.sadd("user:1000:message:content", "第一條未讀資訊");

//未讀系統訊息+1

jedis.hincrby("user:1000:message:num", "sysmessagenum", 1);

jedis.sadd("user:1000:message:content", "第二條未讀資訊");

//檢視所有訊息通知數量

system.out.println(jedis.hgetall("user:1000:message:num"));

//檢視所有訊息通知內容

system.out.println(jedis.smembers("user:1000:message:content"));

[第二條未讀資訊, 第一條未讀資訊]

SOLR在電商中的基本應用

略。欄位僅新增搜尋相關的字段,比如商品id 標題 品牌名稱 分類名稱,商品 上架時間,是否有貨等,注意,這裡存的字段主要是為了搜尋出商品id,在展示時建義通過搜尋到的商品id去資料庫查詢,因為有可能資料已經變更了,而solr還沒更新,比如像 是否有貨這種必須要時實查。新增好中文分詞包,並配置在需要中...

電商面試(redis的應用場景)

1 訂單管理 使用redis的zset資料結構儲存每個使用者的訂單,按照下單時間倒序排列,使用者唯一標識作為key,使用者的訂單集合作為value,使用訂單建立時間的時間戳 訂單號後三位作為分數 為什麼不直接使用下單時間的時間戳作為分數?因為下單時間只精確到秒,同一秒可能出現多個訂單情況,這樣就會出...

Linux在實際中的應用

各位童鞋們,你們是如何度過這周週末的呢?這週末的我在家學習學習再學習,然而學習到一半,公司領導突然給我打了個 過來說有同事等會兒會去客戶那部署無人值守安裝系統服務,問我去不去學習下。我想我正在學linux,雖然還沒學習到那個部分,但是提前接觸下對後面學習肯定會有很大幫助,所以我欣欣然的就同意了。在去...