1樓:
剛試了試SQL好像可以。Redis是Key-Value型資料庫,我不知道能不能做這種事情。
首先要把商品和商品的Tag存到乙個表裡,每個商品的每個Tag都存作乙個記錄。假如你有三個商品,商品編號分別為1,2,3,商品1有6個Tag,分別為20,22,24,26,28,30,商品2有3個Tag,分別為28,30,32,商品3有2個Tag,分別為30,40,那麼你存這些資訊的表就應該是下面這樣:
Table 1
ID ItemID Tag
1 1 20
2 1 22
3 1 24
4 1 26
5 1 28
6 1 30
7 2 28
8 2 30
9 2 32
10 3 30
11 3 40
接下來可以通過self join和count解決你的問題,假如說你希望檢視所有商品和1商品的相似度,你可以先把和商品1有同樣Tag的商品和它們相同的所有Tag查詢出來,再做乙個計數,最後排序。
SQL語句是這樣:
SELECTt1.
ItemID
,Count(t1
.Tag)AS
Similarity
FROM
Table1
ASt1
,Table1
ASt2
WHEREt1.
Tag=t2.
TagANDt2.
ItemID=1
GROUP
BYt1
.ItemID
ORDER
BYCount(t1
.Tag
)DESC
;結果如下:
ItemID Similarity
1 62 2
3 1如果要和其他商品比較就修改AND那行的資料即可。
2樓:Xi Yang
瀉藥。redis是啥我根本不知道,MYSQL也僅限於了解select什麼的基本操作。
不過這個問題和一些生物資訊問題其實很像,你可以參考一下:把儲存的商品預計算乙個無根樹。
首先利用那些tag定義商品的兩兩距離。
然後就可以建樹了,比如用粗鄙的Neighbor joining演算法,或者更粗鄙的UPGMA演算法。
然後在尋找相似商品的時候,就光按照這個預計算的樹來找;或者先沿著這個樹進行粗鄙的找,然後再用別的代價更高的方法進行精確的找。
redis是否可以代替mysql進行資料儲存?
Tony 簡單地說,Redis儲存的rdb和aof都不是為了查詢,只是乙個備份。如果你想做到Redis支援儲存,同時支援查詢,需要改造Redis。可以參考乙個工具 http 做到這點。否則,還是用MySQL,但MySQL的效率不如Redis,但乙個是SQL,乙個是NoSQL,應用場景不同。 lcam...
讓redis充當mysql快取的時候如何快取mysql的資料關係?
Grissom 使用者資訊 物品資訊此類可以用ID作為key,內容全部序列化後儲存為String,注意修改的之後要清除redis的key,不要嘗試去更新,併發下會寫入髒資料。在關聯查詢,比如獲取我的物品,可以先簡單查詢取需要的物品ID,再使用redis mget獲取快取資訊。對於論壇帖子列表,商品列...
請教redis如何做到和mysql資料庫的同步呢?
彼得潘大叔 用MySQL binlog觸發更新 larry 使用redis作為mysql的二級快取即可,實現org.apache.ibatis.cache.Cache介面寫個MybatisRedisCache這樣的類。修改mysql資料後,可以直接重新整理redis快取資料。 紅中 看了很多答案,都...