採用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,雖然還沒學習到那個部分,但是提前接觸下對後面學習肯定會有很大幫助,所以我欣欣然的就同意了。在去...