日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
紅色魔法Redis豆瓣推薦系統(tǒng)(redis豆瓣推薦)

紅色魔法:Redis豆瓣推薦系統(tǒng)

10年的寶山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整寶山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“寶山網(wǎng)站設(shè)計(jì)”,“寶山網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Redis是一個(gè)開(kāi)源的高性能key-value數(shù)據(jù)庫(kù),它支持完全的關(guān)鍵字交換協(xié)議,提供數(shù)據(jù)持久化、高可用性、集群化等優(yōu)秀特性。在本文中,我們將介紹如何使用Redis搭建一個(gè)豆瓣推薦系統(tǒng)。

1. 數(shù)據(jù)庫(kù)設(shè)計(jì)

豆瓣推薦系統(tǒng)需要存儲(chǔ)用戶和用戶行為數(shù)據(jù),以及物品和物品特征數(shù)據(jù)。我們可以使用Redis的HASH數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)這些信息,其中鍵是用戶id或物品ID,值是一個(gè)HashMap。

創(chuàng)建用戶行為數(shù)據(jù):

HSET user:1 activity:book 1
HSET user:1 activity:movie 3
HSET user:1 activity:music 5
HSET user:2 activity:book 4
HSET user:2 activity:movie 2
HSET user:2 activity:music 2

...

創(chuàng)建物品特征數(shù)據(jù):

HSET item:1 Tag:action 1
HSET item:1 tag:adventure 1
HSET item:1 tag:sci-fi 1
HSET item:2 tag:drama 1
HSET item:2 tag:romance 1
HSET item:2 tag:classic 1

...

2. 構(gòu)建推薦列表

基于用戶歷史查詢行為和物品特征,我們可以使用Redis的ZSET結(jié)構(gòu)構(gòu)建推薦列表。我們首先需要計(jì)算一個(gè)物品與用戶查詢行為之間的相似度分值,這可以使用協(xié)同過(guò)濾技術(shù)來(lái)完成。在本文中,我們將使用余弦相似度算法。

計(jì)算用戶和物品的相似度:

def cosine_similarity(user, item):
user_tags = [tag for tag, count in redis.hgetall('user:%s' % user).items()]
item_tags = [tag for tag, count in redis.hgetall('item:%s' % item).items()]
common_tags = set(user_tags) & set(item_tags)

numerator = sum([redis.hget('user:%s' % user, tag) * redis.hget('item:%s' % item, tag) for tag in common_tags])
denominator = math.sqrt(sum([pow(redis.hget('user:%s' % user, tag), 2) for tag in user_tags])) * math.sqrt(sum([pow(redis.hget('item:%s' % item, tag), 2) for tag in item_tags]))
if not denominator:
return 0.0
else:
return float(numerator) / denominator

使用相似度分值來(lái)構(gòu)建推薦列表:

def get_recommendations(user_id, num_items = 10):
ZKEY = 'user:%s:recs' % user_id
user_items = redis.hkeys('user:%s' % user_id)
for item_id in redis.keys('item:*'):
if item_id not in user_items:
score = cosine_similarity(user_id, item_id)
if score > 0.0:
redis.zadd(ZKEY, score, item_id)

return redis.zrevrange(ZKEY, 0, num_items-1, withscores=True)

3. 緩存推薦列表

由于計(jì)算相似度分值需要耗費(fèi)時(shí)間,我們可以對(duì)用戶的推薦列表進(jìn)行緩存,以提升性能。我們可以使用Redis的LIST結(jié)構(gòu)緩存推薦列表,當(dāng)用戶的查詢行為發(fā)生變化時(shí),我們可以輕松地更新這個(gè)列表。

def cache_recommendations(user_id, num_items = 10):
LKEY = 'user:%s:recs' % user_id
recommendations = get_recommendations(user_id, num_items)
redis.delete(LKEY)

for item_id, score in recommendations:
redis.lpush(LKEY, item_id)
redis.expire(LKEY, 60*60*24)

4. 基于實(shí)時(shí)查詢更新推薦列表

為了讓用戶獲得最新的推薦,我們可以隨時(shí)檢測(cè)用戶的行為,當(dāng)用戶查詢一個(gè)物品時(shí),我們可以基于用戶的實(shí)時(shí)行為更新推薦列表。

def query_item(user_id, item_id, num_items = 10):
redis.hincrby('user:%s' % user_id, 'activity:%s' % item_id, 1)
cache_recommendations(user_id, num_items)

完整代碼請(qǐng)參見(jiàn)以下鏈接:

https://github.com/linanqiu/redis-recommendations

成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開(kāi)通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開(kāi)發(fā)老牌服務(wù)商!微信小程序開(kāi)發(fā),APP開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站營(yíng)銷推廣服務(wù)眾多企業(yè)。電話:028-86922220


網(wǎng)站題目:紅色魔法Redis豆瓣推薦系統(tǒng)(redis豆瓣推薦)
URL網(wǎng)址:http://www.dlmjj.cn/article/djpssih.html